Я могу разбить отчет об утечке памяти Visual Studio на ложные срабатывания и реальные утечки памяти. В своей основной функции я инициализирую отладку памяти и вырабатываю реальную утечку памяти в самом начале моего приложения (никогда не удаляйте 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 0x00000000009FCCD0, 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 0x00000000009A12C0, 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».
Все утечки репортеров ниже являются ложными срабатываниями, все выше - настоящими утечками. Ложные срабатывания не означают, что утечек нет (это может быть статически связанная библиотека, которая выделяет кучу при запускеи никогда не освобождает его), но вы не можете устранить утечку, и это совсем не проблема.
С тех пор как я изобрел этот подход, у меня больше не было утечек приложений.
Интересноесли бы я мог скрыть ложные срабатывания (или утечки из статически размещенных объектов).Мой отчет содержит множество сообщений о предметах.Я не хочу прокручивать каждый раз, чтобы увидеть, все ли в порядке.Может быть, фильтр для окна вывода поможет?
Может быть, есть возможность игнорировать первые n утечек или начать создавать отчеты после определенного идентификатора?Если это так, номер или Id можно скорректировать время от времени в качестве первого подхода.