Визуальный детектор утечек - PullRequest
1 голос
/ 03 июля 2010

Я использую Visual Leak Detector для обнаружения утечек памяти в моей программе. Когда программа завершает работу, я получаю утверждение, вызванное следующим кодом в utility.cpp . Когда заголовок Visual Leak Detector исключен из программы, программа запускается и завершается без инцидентов.

// Get the *real* address of the import. If we find this address in the IAT,
// then we've found that the module does import the named import.
import = GetProcAddress(exportmodule, importname);
assert(import != NULL); // Perhaps the named export module does not actually export the named import?

Я не уверен, почему срабатывает утверждение. У кого-нибудь есть идея, в каких сценариях может быть выполнено утверждение?

Спасибо

Ответы [ 2 ]

1 голос
/ 21 ноября 2011

попробуйте использовать другой отладчик, чтобы проверить утечку.Я бы использовал deleteaker

1 голос
/ 09 августа 2010

Я использую ogre3d + vld и получаю ту же проблему! Я отладил код ошибки с помощью GetLastError (): ERROR_PROC_NOT_FOUND, ошибка 127: указанная процедура не найдена.

Хорошо, что он работает (проверено с помощью "new char [20]"), если вы закомментируете эту диссертацию и перекомпилируете, но если вы забудете вызвать "delete Ogre :: Root :: getSingletonPtr ();" это не будет обнаружено: (

Редактировать: чтобы сообщить об утверждениях консоли отладки, вы можете использовать это:

        // Get the *real* address of the import.
    import = GetProcAddress(exportmodule, importname);

    if(import == NULL){
        DWORD err=GetLastError(); 
        WCHAR buff[2048];
        wcsncpy_s(buff, 2048, L"\n============================================\nImport name: ", _TRUNCATE);
        int i=wcslen(buff);
        int n=0;
        //cast to unicode
        while(importname[n]){
            buff[i++]=importname[n++];
        }
        buff[i]=0;
        wcsncat_s(buff, 2048, L"\nExport module: ", _TRUNCATE);
        i=wcslen(buff);
        GetModuleFileName(exportmodule,&buff[i],2048-i);
        wcsncat_s(buff, 2048, L"\nError code: ", _TRUNCATE);
        i=wcslen(buff);
        _itow_s(err,&buff[i],2048-i,10);
        wcsncat_s(buff, 2048, L"\n============================================\n", _TRUNCATE);
        report(buff);
    }
    //assert(import != NULL); // Perhaps the named export module does not actually export the named import?

Результат будет:

============================================
Import name: CoGetMalloc
Export module: C:\data\projects\Avenon\trunk\source\..\build\Avenon_d.exe
Error code: 127
============================================

============================================
Import name: CoTaskMemAlloc
Export module: C:\data\projects\Avenon\trunk\source\..\build\Avenon_d.exe
Error code: 127
============================================

============================================
Import name: CoTaskMemRealloc
Export module: C:\data\projects\Avenon\trunk\source\..\build\Avenon_d.exe
Error code: 127
============================================
...