crtdbg.h 是否与 DirectX 冲突?

Does crtdbg.h conflict with DirectX?

本文关键字:冲突 DirectX 是否 crtdbg      更新时间:2023-10-16

我刚刚发现了隐藏的宝石crtdbg.h它使内存泄漏检测变得更加容易。不幸的是,当我今天将DirectX链接到我的程序中时,我遇到了一些以前从未见过的错误。

1>e:program files (x86)microsoft directx sdk (june 2010)included3dx10math.h(425): error C2059: syntax error : 'constant'
1>e:program files (x86)microsoft directx sdk (june 2010)included3dx10math.h(425): error C2091: function returns function
1>e:program files (x86)microsoft directx sdk (june 2010)included3dx10math.h(425): error C2802: static member 'operator new' has no formal parameters
1>e:program files (x86)microsoft directx sdk (june 2010)included3dx10math.h(426): error C2059: syntax error : 'constant'
1>e:program files (x86)microsoft directx sdk (june 2010)included3dx10math.h(426): error C2090: function returns array
1>e:program files (x86)microsoft directx sdk (june 2010)included3dx10math.inl(1003): error C2761: 'void *(__cdecl *_D3DXMATRIXA16::operator new(void))(size_t)' : member function redeclaration not allowed
1>e:program files (x86)microsoft directx sdk (june 2010)included3dx10math.inl(1003): fatal error C1903: unable to recover from previous error(s); stopping compilation

似乎当 crtdbg 覆盖新运算符时,它会破坏 DirectX SDK 中的某些内容(如果您没有注意到错误,我使用的是 DirectX 11 SDK)。有没有记录在案的事情?一些搜索没有产生任何结果。我真的希望我能继续使用这些内存调试工具,任何解决方法将不胜感激!

好的,我想通了。我通过谷歌找到了这篇文章。(我希望Stack Overflow在我键入此内容时在侧边栏上向我显示它!或者也许它确实如此,我错过了它...

基本上,我需要将包含crtdbg.hstdlib.h_CRTDBG_MAP_ALLOC的定义移动到单独的标头中,并使用项目属性页中 C/C++>>Advanced 下的 Forced Include File 选项强制在任何地方包含文件。这似乎使其覆盖所有其他new覆盖。