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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка в сортировке http://www.cyberforum.ru/cpp-beginners/thread612084.html
Часть программы я сделал, но сортировка массива выходит кривой, та строка, которая после сортировки должна быть первой, внезапно оказывается последней. Как это починить? Вот код того, что есть: /* Упорядочить строки целочисленной прямоугольной матрицы по возрастанию суммы модулей их элементов. Найти номер первого из столбцов, содержащих хотя бы один отрицательный элемент. */ #include...
C++ Символьный код Доброго времени суток! В книге Дейтела в одном из примеров наткнулся на следующий пример кода: cout << "The character ("<<'a'<<") has the value" << static_cast<int>('a') << endl; Вот собственно вопрос: Какую роль выполняет ("<<'a'<<"), и почему именно так, когда можно просто сделать так 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 Здравствуйте. Не знал как назвать тему, боялся что, если назову "КАК ЭТО РАБОТАЕТ?" то её удалят. Пишу программу для вычисления длинных целых чисел. Целые числа из строк считал в массивы в обратном порядке (т.е. число 123 массив a=3 a=2 a=1) У меня есть функция, в которую я передаю 2 массива по ссылкам и их размерность + массив куда записать результат. Но это всё мало относится к проблеме... в... подробнее

Показать сообщение отдельно
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
23.06.2012, 03:19     Как правильно освобождать память в динамических структурах
Использую деструктор для освобождения памяти от указателя на начало списка.

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; //Освобождение памяти
   
}
Мой вопрос: Вообще всё это не способствует тому что данные какой-то другой программы ненароком попадут в те ячейки памяти, которые используется этим списком?

И интересует еще вопрос
в каких книгах подробно рассматриваются динамические структуры.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru