我使用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