Исходя из моего собственного опыта, потеря утечки памяти может быть вызвана разными причинами. суммировать наиболее важные из них:
Изменения в исходном коде, которые:
- отключение отчетов об утечке памяти (т. Е. Использование _CrtSetDbgFlag )
- установка пользовательских хуков отчетов (см. _CrtSetReportHook, _CrtSetReportHook2 )
- перенаправить вывод в файл (см. CrtSetReportMode
- изменения в исходном коде, которые приводят к тихим «сбоям» при завершении работы приложения - приложение молча завершает работу без какого-либо указания на проблему, прежде чем достигнет точки, когда сообщается об утечке памяти (как бы невероятно это ни казалось, у меня это было когда-то) .
Настройки в среде разработки приводят к перенаправлению вывода в другое окно. Один из возможных вариантов: Инструменты \ Параметры \ Отладка \ Общие \ Перенаправить весь текст окна вывода в окно немедленного действия (пятое снизу). Возможно, здесь есть и другие возможности.
Полагаю, одной из возможностей исключить пункт 2 было бы создание простого консольного приложения в строках (main.cpp):
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifndef DEBUG_NEW
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif
int _tmain(int argc, _TCHAR* argv[])
{
int nOldState = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
_CrtSetDbgFlag(nOldState | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
int *pInt = new int[100];
return 0;
}
Если запуск этого приложения правильно выдает утечки памяти, то, к сожалению, вы, вероятно, в случае 1
Конечно, я исключил очевидные вещи, по которым вывод можно было пропустить (некоторые из них уже упоминались в комментариях).