Я пробовал несколько часов, чтобы заставить его работать. Пока он обнаруживает утечки памяти, но находит тонну, и я не уверен, что это реально. Также я хотел бы видеть номер файла и строки (я знаю, что это возможно, но я не могу заставить его работать), чтобы я мог фактически решить утечку памяти.Как обнаружить утечки памяти с помощью инструментов в CRT в проекте C++/Java с использованием JNI?
Я добавил код, чтобы сбрасывать утечки памяти в методе, который часто называется (около 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();
Спасибо за помощь!
попробуйте deleaker или аналогичный отладчик - он помогает контролировать утечки памяти и объекты пользователя ... он укажет на строку, в которой обнаружена ошибка. –
Дело в том, что файл .jar и deleaker будут принимать только .exe. Вы знаете какой-либо аналогичный инструмент, который будет работать с программой Java, которая вызывает код C++ через JNI? Благодарю. – Djeezus
Каждое выделение является утечкой при вызове _CrtDumpMemoryLeaks() все время. Подумайте об использовании DllMain() для хорошего триггера. –