утечки памяти
От: Antonidze Россия  
Дата: 27.05.05 08:07
Оценка:
В процессе тестирования программы обнаружилось, что выделенная память освобождается не сразу, как ожидается, а где-то в конце программы. Причём, утечек, как таковых, нет: _CrtDumpMemoryLeaks() перед выходом из main показывает, что всё чисто. Почитав статьи, посвящённые методам борьбы с утечками, подумал, что мне может помочь _CrtMemCheckpoint.

Делаю так:
init();

_CrtMemState s1, s2, s3;

_CrtMemCheckpoint( &s1 );
test(); // вся память, выделяемая в test(), должна в нём же и освобождаться
_CrtMemCheckpoint( &s2 );

if ( _CrtMemDifference( &s3, &s1, &s2) )
  _CrtMemDumpStatistics( &s3 );

cleanup(); // судя по всему, вся неосвобождённая до сих пор память освобождается здесь

Имею следующее:
0 bytes in 0 Free Blocks.
68 bytes in 3 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 68 bytes.
Total allocations: 184293 bytes.

Т.е. где-то что-то не освобождается

Можно ли как-нибудь узнать адреса этих неосвобождёных блоков памяти?
Если нет, то что ещё можно предпринять для локализации проблемного места в коде?
Re: утечки памяти
От: WoldemaR Россия  
Дата: 27.05.05 11:21
Оценка:
Здравствуйте, Antonidze, Вы писали:
...
A>Можно ли как-нибудь узнать адреса этих неосвобождёных блоков памяти?
A>Если нет, то что ещё можно предпринять для локализации проблемного места в коде?

Может ещё такое говно быть — что это вовсе не утечки, а глюки в зенках микросовтовских программеров.
Произоити сие безобразие могёт в следствии захвата и освобождения динамической памяти внутри соответственно конструкторов и деструкторов классов, расположенных в памяти как глобальные переменные-экземпляры этих классов, внутри подгружаемых библиотек dll.

Об этом было здесь:
http://www.rsdn.ru/Forum/Message.aspx?mid=1108263
Автор: WoldemaR
Дата: 05.04.05
Re: утечки памяти
От: DangerDen  
Дата: 27.05.05 11:23
Оценка:
Здравствуйте, Antonidze, Вы писали:

A>В процессе тестирования программы обнаружилось, что выделенная память освобождается не сразу, как ожидается, а где-то в конце программы. Причём, утечек, как таковых, нет: _CrtDumpMemoryLeaks() перед выходом из main показывает, что всё чисто. Почитав статьи, посвящённые методам борьбы с утечками, подумал, что мне может помочь _CrtMemCheckpoint.


Используй DumpAllObjectsSince()
Re[2]: утечки памяти
От: DangerDen  
Дата: 27.05.05 11:24
Оценка:
Здравствуйте, DangerDen, Вы писали:

DD>Здравствуйте, Antonidze, Вы писали:


A>>В процессе тестирования программы обнаружилось, что выделенная память освобождается не сразу, как ожидается, а где-то в конце программы. Причём, утечек, как таковых, нет: _CrtDumpMemoryLeaks() перед выходом из main показывает, что всё чисто. Почитав статьи, посвящённые методам борьбы с утечками, подумал, что мне может помочь _CrtMemCheckpoint.


DD>Используй DumpAllObjectsSince()

В смысле _CrtMemDumpAllObjectsSince
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.