В процессе тестирования программы обнаружилось, что выделенная память освобождается не сразу, как ожидается, а где-то в конце программы. Причём, утечек, как таковых, нет: _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.
Т.е. где-то что-то не освобождается
Можно ли как-нибудь узнать адреса этих неосвобождёных блоков памяти?
Если нет, то что ещё можно предпринять для локализации проблемного места в коде?