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

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

Войти
Регистрация
Восстановить пароль
 
 
sion5
1 / 1 / 0
Регистрация: 15.10.2013
Сообщений: 42
#1

Проверка освобождения памяти (new, delete) - C++

08.09.2015, 10:13. Просмотров 733. Ответов 23
Метки нет (Все метки)

Всем привет.

Программы помаленьку становятся сложнее. Появляются самодельные контейнеры внутри других самодельных контейнеров внутри каких-то child объектов... И это всё должно красиво и чисто удалиться, когда удаляется parent.
И хотя мне кажется, что я правильно прописал все деструкторы, не помешала бы возможность проверить.

Что бы такое вставить перед самым return из функции main, чтоб убедиться, что освобождена вся память?
Может, кто-то вспомнит какой-то способ получить информацию об участках памяти, которые выделялись?
Или, возможно, можно обойтись без изменения кода, а проверить в каком-то дебаггере? У меня есть OllyDbg.

Поначалу я добавлял что-то типа printf("Created %p\n", this) в конструктор и деструктор каждого класса, но это, конечно, бред новичка.
На данный момент лучшая идея - это по всей программе заменить new и delete на самодельные макросы, которые будут не толко создавать/удалять объект, а еще и сохранять информацию (адрес, размер, имя класса и строка кода, из которой объект был создан).
Но все-таки не хотелось бы так менять программу...

Если у кого-то есть интересные мысли, обязательно делитесь.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.09.2015, 10:13     Проверка освобождения памяти (new, delete)
Посмотрите здесь:

Не понимаю логики освобождения памяти C++
C++ Функциии динамического выделения и освобождения памяти
Деструкторы, аналоги освобождения памяти C++
C++ Не могу разобраться с указателями(не понимаю сути освобождения памяти)
Нюансы выделения и освобождения памяти (структуры) C++
delete[] *pointer vs. delete pointer и утечка памяти C++
C++ Ошибка освобождения памяти new/delete
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,906
Записей в блоге: 17
08.09.2015, 20:21     Проверка освобождения памяти (new, delete) #21
Цитата Сообщение от sion5 Посмотреть сообщение
с которой маленькие программы весили бы столько, сколько положено маленьким программам.
Просто не пишите маленькие программы... и не будет таких глупых утверждений.

Цитата Сообщение от sion5 Посмотреть сообщение
требует библиотек общим весом 70 Мб и колд-старт секунд 5...
Обычно ~40...50M, если собирать статически ~7...10M

Цитата Сообщение от sion5 Посмотреть сообщение
Меня интересуют решения на самом низком возможном уровне.
Учите WinApi думаю ниже некуда, заодно осознаете насколько легче писать на Qt
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sion5
1 / 1 / 0
Регистрация: 15.10.2013
Сообщений: 42
08.09.2015, 21:15  [ТС]     Проверка освобождения памяти (new, delete) #22
Да, я как-раз и оборачиваю WinApi в более удобные (на мой взгляд) классы. Код программ выглядят почти как на Qt. Только система сигналов/слотов немного другая и Layout'ы я заменил кое-чем другим, но не менее функциональным...

Сейчас для меня главное - это не налажать именно с удалением... Виндосовские окна, когда их удаляешь, автоматически удаляют всех своих чайлдов, все меню, все пункты меню... А у меня каждый пункт меню и каждое чайлд окно обернуто в класс и создавалось с помощью new. То есть, мне не достаточно того, что windows удаляет что-то там у себя, а нужно еще и мои объекты удалять. Поначалу немного запутался, но теперь, вроде, всё работает просто и логично. Советы из этой темы помогут проверить.
Avazart
 Аватар для Avazart
7037 / 5214 / 259
Регистрация: 10.12.2010
Сообщений: 22,906
Записей в блоге: 17
08.09.2015, 22:37     Проверка освобождения памяти (new, delete) #23
Ну так что мешает создать базовый класс виджета с поддержкой родитель-ребенок, и его продумать/ и оттестить хорошо?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.09.2015, 23:36     Проверка освобождения памяти (new, delete)
Еще ссылки по теме:

C++ Переполнение стека во время освобождения памяти
Стратегия выделения/освобождения памяти C++
Адреса памяти, в которых происходит выделение, и нет освобождения C++
Написать функции для работы с массивом - выделения/освобождения памяти, консольного ввода/вывода C++
C++ Необходим совет при освобождения памяти динамического массива

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

Или воспользуйтесь поиском по форуму:
sion5
1 / 1 / 0
Регистрация: 15.10.2013
Сообщений: 42
08.09.2015, 23:36  [ТС]     Проверка освобождения памяти (new, delete) #24
Я уже почти готов пожертвовать аккаунтом на данном форуме, чтоб сказать тебе всё, что я думаю о твоих советах и особенно о совете "не писать маленькие программы" :-D
Ладно, хватит...
Yandex
Объявления
08.09.2015, 23:36     Проверка освобождения памяти (new, delete)
Ответ Создать тему
Опции темы

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