С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка в сортировке http://www.cyberforum.ru/cpp-beginners/thread612084.html
Часть программы я сделал, но сортировка массива выходит кривой, та строка, которая после сортировки должна быть первой, внезапно оказывается последней. Как это починить? Вот код того, что есть: ...
C++ Символьный код Доброго времени суток! В книге Дейтела в одном из примеров наткнулся на следующий пример кода: cout << "The character ("<<'a'<<") has the value" << static_cast<int>('a') << endl; Вот собственно... http://www.cyberforum.ru/cpp-beginners/thread612077.html
C++ Полиномы Эрмита
Нужна программа,которая с помощью полиномов Эрмита сможет преобразовывать двумерные изображения. Полиномы Эрмита могут быть получены при помощи формулы {H}_{n+1}(x)=2x{H}_{n}(x)-2n{H}_{n-1}(x)
C++ WinAPI vs wxWidgets
Хочу перевести свое консольное приложение в нормальный вид. Опыта написания приложений виндовс нету. С чего стоит начать, с WinAPI или wxWidgets? (пишу все в wxDev-Cpp) Или вообще при начальных...
C++ Существует указатель p. Можно ли выяснить, содержит он адрес допустимого значения или нет http://www.cyberforum.ru/cpp-beginners/thread612036.html
если да, то как ?
C++ C/C++ Использование функций, использование break Здравствуйте. Не знал как назвать тему, боялся что, если назову "КАК ЭТО РАБОТАЕТ?" то её удалят. Пишу программу для вычисления длинных целых чисел. Целые числа из строк считал в массивы в обратном... подробнее

Показать сообщение отдельно
daslex
1286 / 530 / 109
Регистрация: 02.08.2011
Сообщений: 2,750

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

23.06.2012, 03:19. Просмотров 1021. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.