Прерывание при выделении определенного количества байтов - PullRequest
2 голосов
/ 18 ноября 2010

_CrtDumpMemoryLeaks();, если вы не знали, это функция, которая сбрасывает все утечки памяти в программе.Мой в настоящее время показывает, что у меня есть утечка памяти размером 3632062 байта (она не освобождается).

Мне было интересно: есть ли способ заставить Visual C ++ Express прерваться, когда было выделено определенное количество байтов?Таким образом, я мог сломаться, когда было выделено 3632062 байта, а затем прочитать трассировку стека, чтобы увидеть, где я ее выделил.

В настоящее время это единственный метод, который я могу придумать, чтобы найти место, где выделяется память, чтобы я мог это исправить.Я много искал свой код, но нигде не могу найти, где мне нужно было бы выделить 3632062 байта (поскольку единственный загружаемый файл - 2767136 байтов ..), хотя я уверен, что утечка связана с файлом, который я 'm работает на.

Есть идеи по поиску источника утечки памяти?Я использую Native C ++, Visual C ++ 2010

Ответы [ 2 ]

3 голосов
/ 18 ноября 2010

Вы можете сделать это, используя _CrtSetAllocHook для отслеживания общего использования памяти.

UMDH выдаст вам список выделенных блоков во всех кучах. Это может быть тем, что вам нужно, поскольку нарушение при достижении заданного порогового значения общего выделения не скажет вам, где были распределены все блоки.

1 голос
/ 18 ноября 2010

Я ранее использовал этот простой детектор утечек памяти с хорошим успехом для обнаружения утечек памяти.

...