Обнаружение утечки памяти с boost :: test - PullRequest
6 голосов
/ 23 сентября 2011

Я пытаюсь включить обнаружение утечки памяти msvc с помощью номера строки, подобного этому фрагменту, который я нашел здесь :

Detected memory leaks!
Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18} 
normal block at 0x00780E80, 64 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.

Я попытался установить определение препроцессора

_CRTDBG_MAP_ALLOC

вручную в свойствах проекта, но я получаю только это:

Dumping objects ->
{1466} normal block at 0x00BD4DD0, 40 bytes long.
 Data: <(o;   ; (o;   1 > 28 6F 3B 00 90 A9 3B 00 28 6F 3B 00 00 D6 31 10

без номеров строк.Я также попытался вручную определить main с помощью BOOST_TEST_NO_MAIN и выполнить дамп самостоятельно:

int main( int argc, char* argv[] )
{
    int res = ::boost::unit_test::unit_test_main( &init_function, argc, argv );  
    _CrtDumpMemoryLeaks();
    return res;
}

Но также безуспешно.Как это можно сделать?

Ответы [ 3 ]

5 голосов
/ 24 сентября 2011

Используя Boost.Test, вы можете использовать --detect_memory_leaks = "номер выделения"

4 голосов
/ 23 сентября 2011

В MSVC вы можете установить точку останова для номера распределения 1466, в коде:

  _crtBreakAlloc = 1466

или в окне просмотра вы можете добавить _crtBreakAlloc и значение 1466 после запуска приложения (конечновам нужна точка останова в основной функции). Подробнее о MSDN

0 голосов
/ 21 ноября 2011

Попробуйте использовать отладчик! Например, с помощью средства удаления можно выбрать стек, чтобы увидеть, где была выделена память

...