Как обнаружить утечки памяти с помощью инструментов в CRT в проекте C ++ / Java с использованием JNI? - PullRequest
1 голос
/ 15 марта 2012

Я уже несколько часов пытаюсь заставить его работать.Пока он обнаруживает утечки памяти, но находит тонну, и я не уверен, что это реально.Также я хотел бы видеть номер файла и строки (я знаю, что это возможно, но я не могу заставить его работать), чтобы я мог на самом деле решить утечки памяти.

Я добавил код для дампаутечки памяти в методе, который часто вызывается (обычно около 60 раз в секунду), я не уверен, нормально ли это или нет, но поскольку у меня нет «основной» функции, трудно решить, куда поместить код

Вот что я добавил:

// This part is in the includes part of the file
#define _CRTDBG_MAPALLOC
#define _CRTDBG_MAP_ALLOC_NEW
#include <stdlib.h>
#include <crtdbg.h>

#ifdef _DEBUG
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif

// This part is in the method
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
_CrtDumpMemoryLeaks();

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Попробуйте

Визуальный детектор утечек

http://www.codeproject.com/Articles/9815/Visual-Leak-Detector-Enhanced-Memory-Leak-Detectio

У меня были очень хорошие результаты.

0 голосов
/ 16 марта 2012

У вас есть возможность сравнить состояние памяти перед выполнением действия и после этого. Для этого просто используйте _CrtMemDifference в ваших модульных тестах. Идея состоит в написании модульных тестов, которые будут вызывать различные части вашего кода и получать состояние памяти приложения до использования _CrtMemCheckpoint и после вызова. Поэтому после этого вам нужно сравнить две контрольные точки с _CrtMemDifference.

...