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

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

// 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?

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

Спасибо

1
задан KindDragon 30 January 2017 в 15:21
поделиться

1 ответ

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

Хорошо то, что он работает (проверено с помощью "new char [20]"), если вы закомментируете это утверждение и перекомпилируете, но если вы забыли вызвать «удалить 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
============================================
1
ответ дан 2 September 2019 в 23:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: