我使用OGRE3D + VLD和我同樣的問題! 我使用GetLastError()調試了錯誤代碼: ERROR_PROC_NOT_FOUND,錯誤127:找不到指定的過程。
的好處是,它的作品(與「新的char [20]」測試)如果你註釋掉assertation並重新編譯, 但是如果你忘記調用「刪除食人魔::根:: getSingletonPtr() ;」它不會被檢測到:(
編輯:報告assertations你可以使用這個調試控制檯:
// 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
============================================
exportmodule(DLL的名稱)和importname(函數的名稱)的值是什麼?可能是Visual Leak Detector修補DLL的導入表,這可能會解釋這個問題EM。 – Patrick 2010-07-03 20:32:21
感謝Patrick的回覆。我無法調試線路本身。只要我點擊某處(任何地方),斷言窗口就會消失。大多數情況下,我從窗口收到「錯誤」聲音,甚至沒有彈出窗口。現在我已經擺脫了VSD,而是選擇了標準的泄漏檢測。不是理想的解決方案,但在這種情況下,我沒有什麼選擇。 – Samaursa 2010-07-13 22:22:22
該錯誤修復了最新的源代碼。 – KindDragon 2011-06-11 19:31:16