Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
Ultrator
11 / 7 / 1
Регистрация: 28.04.2009
Сообщений: 219
#1

Операции с динамической памятью - C++

28.04.2009, 22:20. Просмотров 1561. Ответов 20
Метки нет (Все метки)

Есть new и delete.
Можно написать так:
C++
1
2
int *a;
a = new int [100];
Дальше, хотим удалить - пишем
C++
1
delete [] a;
Вопрос такой: а если надо удалить не весь отрезок a[0]..a[99], а только его "хвост", например a[97]...a[99] - тогда что нужно писать ?

(Интересует именно стандартный синтаксис C++, не C).

Благодарю за ответ.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2009, 22:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Операции с динамической памятью (C++):

Ошибка с динамической памятью - C++
Очень прошу помочь исправить ошибку в области дин.памяти. Проблема: 1. Шаг Создаю массив для записи 2. Шаг удаляю элемент под...

Работа с динамической памятью! - C++
Привет! Такая задача: Необходимо выделить(по N Кб) и освободить всю динамическую память. Определить время выделения и освобождения, и объем...

Работа с динамической памятью - C++
Привет всем. Я недавно начал изучать C++ и наткнулся на ошибку:"двумерный динам.exe вызвал срабатывание точки останова" при очистке...

программа с динамической памятью - C++
текст программы #include <iostream> #include <conio.h> #include <stdlib.h> #include <iomanip> #define m 12 using namespace...

Работа с динамической памятью в цикле - C++
Всем привет. Есть переменная data, созданная динамически На каждой итерации цикла в нее записывается информация char* data =...

Объяснить код работы с динамической памятью - C++
Объясните пожалуйста этот кусок кода : class test { public: int *p = new int(); }; int main() { test *b =...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Alexandr_LN
1 / 1 / 0
Регистрация: 28.04.2009
Сообщений: 116
29.04.2009, 14:17 #16
1
2



int **a = new int*[5];
for (int i=0; i<5; i++) a[i] = new int;


в таком случае, удалять элементы будет можно, в связи с тем, что масив содержит указатели на созданные динамически целые числа типа int.


Я попробовал так сделать, но реально все равно не удалось удалить!!!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int **a=new int *[10];
    int i;
    for (i = 0; i < 10; i++) {
        a[i]=new int;
        *a[i]=i;
        cout << "a[" << i << "]=" << *a[i] << endl;
    }
 
    for (i = 5; i < 10; i++) {
        delete (a+i);
        cout << "a[" << i << "]=" << *a[i] << endl;
    }
    for (i = 0; i < 10; i++) {
        cout << "a[" << i << "]=" << *a[i] << endl;
    }
Или может я что то не так делаю??
0
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
29.04.2009, 14:32 #17
Разумеется, не так делаешь. После выполнения delete(a+i) любое обращение к a[i] уже невалидно и приводит к UB. Впечатление о том, что "не удалось удалить" - всего лишь частный случай такого UB, а могло быть и намного хуже.....
0
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
29.04.2009, 14:33 #18
Alexandr_LN, Конечно не так.
Никто не запрещает тебе обращаться к блоку памяти,даже после ее освобождения для дальнейшего использования.
0
Alexandr_LN
1 / 1 / 0
Регистрация: 28.04.2009
Сообщений: 116
29.04.2009, 14:45 #19
Дело в том что, после выполнения delete(a+i), я снова выполняю действие for (i = 0; i < 10; i++) {
cout << "a[" << i << "]=" << *a[i] << endl;
и результат тот же как и при первом цикле...
Ничего абсолютно не изменилось, ни ошибок при компиляции, и данные те же остались...
0
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
29.04.2009, 14:51 #20
Ну так при выполнении delete(a+i) ты не удалил данные по этому адресу,а показал системе,что данный блок свободен и может использоваться для дальнейшего выделения памяти. При этом там все еще могут лежать твои данные.
0
Alexandr_LN
1 / 1 / 0
Регистрация: 28.04.2009
Сообщений: 116
29.04.2009, 15:16 #21
Да действительно... Ну что же учиться, учиться и еще раз учиться. Спасибо за помощь.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2009, 15:16
Привет! Вот еще темы с ответами:

Функции для работы с динамической памятью - C++
только начал изучать С++ сразу столкнулся с кучей вопросов. задача такая : разработать функции Create,Resize и Remove для создания,...

Написать класс контейнера с динамической памятью с++ - C++
Помогите, пожалуйста, вот с такой задачей. &quot;Имеются N линейных списков, имеющих одинаковую структуру и упорядоченных по возрастанию...

Работа с динамической памятью через указатели. - C++
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++. Есть такая задача: Создать массив из N целых чисел, N вводит...

Управление динамической памятью при работе с классами - C++
Всем привет! Есть очень сложный класс, внутри которого есть куча указателей, в его конструкторе все эти указатели получают память при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.04.2009, 15:16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru