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

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

Восстановить пароль Регистрация
 
 
sion5
1 / 1 / 0
Регистрация: 15.10.2013
Сообщений: 42
08.09.2015, 10:13     Проверка освобождения памяти (new, delete) #1
Всем привет.

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

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

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

Если у кого-то есть интересные мысли, обязательно делитесь.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,570
Записей в блоге: 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
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,570
Записей в блоге: 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++

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

Или воспользуйтесь поиском по форуму:
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)
Ответ Создать тему
Опции темы

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