Старый вопрос, но у меня есть ответ. Я могу разбить отчет на ложные срабатывания и реальные утечки памяти. В своей основной функции я инициализирую отладку памяти и вырабатываю реальную утечку памяти в самом начале моего приложения (никогда не удаляйте pcDynamicHeapStart):
int main()
{
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
char* pcDynamicHeapStart = new char[ 17u ];
strcpy_s( pcDynamicHeapStart, 17u, "DynamicHeapStart" );
...
После того, как моя заявка будет завершена, отчет содержит
Detected memory leaks!
Dumping objects ->
{15554} normal block at 0x00000000009CB7C0, 80 bytes long.
Data: < > DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD
{14006} normal block at 0x00000000009CB360, 17 bytes long.
Data: <DynamicHeapStart> 44 79 6E 61 6D 69 63 48 65 61 70 53 74 61 72 74
{13998} normal block at 0x00000000009BF4B0, 32 bytes long.
Data: < ^ > E0 5E 9B 00 00 00 00 00 F0 7F 9C 00 00 00 00 00
{13997} normal block at 0x00000000009CA4B0, 8 bytes long.
Data: < > 14 00 00 00 00 00 00 00
{13982} normal block at 0x00000000009CB7C0, 16 bytes long.
Data: < @ > D0 DD D6 40 01 00 00 00 90 08 9C 00 00 00 00 00
...
Object dump complete.
Теперь посмотрите на строку "Данные: <<strong> DynamicHeapStart > 44 79 6E 61 6D 69 63 48 65 61 70 53 74 61 72 74".
Все приведенные ниже утечки репортеров являются ложными срабатываниями, все вышеперечисленные являются настоящими утечками.
Ложные срабатывания не означают, что утечки нет (это может быть статически связанная библиотека, которая выделяет кучу при запуске и никогда не освобождает ее), но вы не можете устранить утечку, и это не проблема.
С тех пор, как я изобрел этот подход, у меня больше не было утечек приложений.
Я предоставляю это здесь и надеюсь, что это поможет другим разработчикам получить стабильные приложения.