Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2011, 21:46   #21
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

YourLastSong

Недавно заметил через диспетчер задач, что в моей программе присутствуют утечки памяти.

Кол-во операторов new совпадает с delete, а new[] — с delete[], malloc не использую.


1. для начала - убрать весь говно-код с голыми указателяими и new/delete и по максимуму заюзать std::unique_ptr/std::shared_ptr и идиому RAII.

2. пронаследовать все классы с указателями от boost::noncopyable, посмотреть что при этом произойдет, сделать выводы.

3. почитать доки как использовать DebugCrt, а частности про снапшоты памяти и диффы

4. воспользоваться специальзированными средстваими типа AQTime
Rififi вне форума Ответить с цитированием
Старый 02.11.2011, 21:50   #22
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
Он показывает количество используемой памяти. Если это самое количество стремительно увеличивается - утечка.

Смотрю на колонку memory. Или так делать не надо?
Ну, это ничего не объясняет. Откуда мне знать, что проблема вызвана моей прогой?

Цитата:
Просто глобальные переменные - очень плохая практика, как goto.
Как я и думал. На вкус и цвет друзей нет. Кстати, а что не так с goto?
f.hump вне форума Ответить с цитированием
Старый 02.11.2011, 21:52   #23
YourLastSong
Пользователь
 
Регистрация: 12.12.2010
Сообщений: 75
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
Ну, это ничего не объясняет. Откуда мне знать, что проблема вызвана моей прогой?
Я ведь смотрю в memory своего процесса. Разве так нельзя делать? Почему?
YourLastSong вне форума Ответить с цитированием
Старый 02.11.2011, 22:24   #24
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

к советам Rififi можно еще добавить:
Не забываем про виртуальные деструкторы в базовых классах.
new[]/delete[] - зло. по умолчанию лучше использовать что-нибудь готовое из stl. вместо массивов вектор - самое оно.
_Ч_ вне форума Ответить с цитированием
Старый 02.11.2011, 22:36   #25
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

Цитата:
К сожалению, сейчас crtdbg.h ни о чём не сообщает.
А как спрашивали? Может неправильно использовали? Код от проверки можно сюда запостить. Его не должно быть много.

Цитата:
Я ведь смотрю в memory своего процесса. Разве так нельзя делать? Почему?
ОS на свое усмотрение может выделять/отбирать память процессу по своему усмотрению. Алгоритмы достаточно хитрые ибо оптимизация. Например зачем в систему возвращать память, если свободной пока что достаточно. А вдруг она процессу еще пригодится. ОS у процесса незаюзанную память может попробовать отобрать когда она действительно понадобится в другом месте ну и т.д. Это все конечно же не факты. За фактами нужно лезть в соответствующие доки.
В общем сперва вам стоит доказать, что утечки все-таки есть с помощью спец инструментов.
_Ч_ вне форума Ответить с цитированием
Старый 02.11.2011, 22:48   #26
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
Просто глобальные переменные - очень плохая практика, как goto.
Так он, что не выгружается по завершении?
Или наблюдем за ефектом какой-то последовательности действий на цифры в манагере? Если так, тоэто никак не помогает, на мой взляд, обнаружению утечек. Может манагер памяти решил не освобождать память, а держать ее зарезервированной, или еще какая фигня.
f.hump вне форума Ответить с цитированием
Старый 02.11.2011, 22:56   #27
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Утечка памяти может быть не только из-за new/delete. Если создаются объекты GDI, то они должны быть освобождены, так же ком объекты (например, DirectX) могут привести к утечке.
An1ka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Утечки памяти volod3000 Общие вопросы Delphi 0 22.06.2011 00:08
утечки памяти KOLANICH Общие вопросы C/C++ 3 30.01.2011 00:15
Утечки памяти. c++ learner Общие вопросы C/C++ 3 29.11.2010 15:01
Достали утечки памяти Порфирий Общие вопросы C/C++ 4 22.12.2009 11:32
InterBase 7.1 - утечки памяти. pushkin42 БД в Delphi 2 21.03.2007 16:15