1371 / 594 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
1

Как правильно освобождать память в динамических структурах

23.06.2012, 03:19. Показов 1612. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Использую деструктор для освобождения памяти от указателя на начало списка.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct Node
{
 int x;
 Node *Next;
};
 
class List
{
 Node *Head; //Указатель на начало списка
  public:
   List():Head(NULL) {};
   ~List();
};
 
List::~List()
{
  delete Head; //Освобождение
}
Вроде как список это и не массив, значит можно подумать, что достаточно удалить только один элемент (тот что указывает на начало списка)

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

Мой вопрос: Как удалять правильно.


Еще вот что. При добавлении элементов в список сам указатель на начало списка я не трогаю и объявляю некоторую переменную, которая изначально расположена по адресу начала списка. Сначала меняю её, потом меняю адрес начала списа

C++
1
2
3
4
5
6
7
8
9
10
11
12
void List::Add(int x)
{
  Node temp=new Node;
   temp->Next=Head;
   temp->x=x;
 
   Head=temp; //Начало списка это последнее измененное поле структуры
   
   temp=NULL; 
   delete temp; //Освобождение памяти
   
}
Мой вопрос: Вообще всё это не способствует тому что данные какой-то другой программы ненароком попадут в те ячейки памяти, которые используется этим списком?

И интересует еще вопрос
в каких книгах подробно рассматриваются динамические структуры.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.06.2012, 03:19
Ответы с готовыми решениями:

Как правильно освобождать память
Подскажите пожалуйста ,где память чистить в таком случае?Или как это правильно сделать. char...

Как правильно освобождать память от вектора?
ПОжалуйста если можно пример для одномерного и двумерного. циклом или метод есть какой то?

Как и когда правильно освобождать динамически выделенную память?
Доброго времени суток! Задалась вопросом, заданным в заголовке темы "Как и когда правильно...

Зачем нужно освобождать память динамических объектов в деструкторе, если всё равно это сделает менеджер памяти
Не скажу за все ОС-и, но под Windows есть менеджер памяти. Когда по ходу кода встречается new, ну...

2
32 / 30 / 6
Регистрация: 21.06.2012
Сообщений: 91
23.06.2012, 05:19 2
Тут код списка, который правильно удаляет. Ты выделяешь элементы в куче, удалить только первый недостаточно. Функцию Add тоже там посмотри, как реализовано.

По поводу книжек могу посоветовать Скотт Мейерс
Эффективное использование STL. Но это может и не для начального уровня.
1
1371 / 594 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
23.06.2012, 11:55  [ТС] 3
Насколько я вижу, там реализация очереди и добавление элементов в очередь. А очередь это FIFO

У меня идет как LIFO, наверное должна быть разница в том как добавлять

Там в примере использован указатель на указатель, хотя вряд ли этого нельзя было избежать

Мне интересен вопрос не добавления, а освобождения памяти. В коде у меня правильно добавляется всё, просто если я выделяю паямть локально и сразу же локально высвобождаю то что выделил, возникает сомнение, описанное вторым вопросом



вот этим delete temp; //Освобождение памяти в функции Add, я лишаю связи программы с нужной кучей и туда могут попасть значения из других программ. Я правильно понял?
0
23.06.2012, 11:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.06.2012, 11:55
Помогаю со студенческими работами здесь

Dll на C++ кушает память, как правильно удалять и освобождать память?
Добрый день, совсем мало опыта в программировании на C++, помогите пожалуйста знатоки С++. Есть...

Память в динамических структурах
Использую в программе односвязный список. При каждом запуске программы создается этот список...

Как правильно освобождать память от динамического массива
Изучаю освобождение памяти. (тестю на XE7) У меня есть динамический массив Button'ов, объявленный...

Как освобождать оперативную память?
всем привет. в последнее время появилась проблема нехватки оперативной памяти. сначала это...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru