1

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?

なぜアサートがトリガーされているのかわかりません。アサーションをトリガーできるシナリオを誰かが知っていますか?

ありがとう

4

2 に答える 2

1

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?

結果は次のようになります。

============================================
インポート名:CoGetMalloc
エクスポートモジュール:C:\ data \ projects \ Avenon \ trunk \ source \ .. \ build \ Avenon_d.exe
エラーコード:127
============================================

============================================
インポート名:CoTaskMemAlloc
エクスポートモジュール:C:\ data \ projects \ Avenon \ trunk \ source \ .. \ build \ Avenon_d.exe
エラーコード:127
============================================

============================================
インポート名:CoTaskMemRealloc
エクスポートモジュール:C:\ data \ projects \ Avenon \ trunk \ source \ .. \ build \ Avenon_d.exe
エラーコード:127
============================================
于 2010-08-09T19:00:07.257 に答える
1

別のデバッガーを使用してリークを確認してみてください。私はdeleakerを使用します

于 2011-11-21T19:32:57.017 に答える