带有D3DX9的C++ - 内存大小以10 MB /秒的速度增长 - 为什么?

Pim*_*mgd 1 c++ directx 3d

我正在研究3D引擎作为学校项目.我已经安装了虚拟泄漏检测器来摆脱内存泄漏(并且它工作,因为我不再获得任何这些转储).最近,我不小心让我的应用程序运行了5分钟...而我的电脑变得很慢.我通过注释掉行等来跟踪这个问题,但是我无法找到为什么在关闭应用程序之前C++不会释放我已清除的内存.

问题:"内部"内存泄漏,看起来C++只是在应用程序关闭后才删除内容

代码: 我的渲染代码(在pastebin Yz79Ck0b)

注意:我知道我不应该每次创建一个新的Mesh,但这不应该导致这个问题,对吧?我的IDE是Visual Studio 2008,我正在使用WIN32项目.当我取出纹理和模型时,我有0字节的内存增长.

Eam*_*nne 6

正如Sanjit所说,你必须使用delete[]删除数组 - 正如DeadMG所说,RAII容器是最好的做法,不会弄乱你的资源.

然而,虽然它不是立即显而易见的文档,显然所有的Direct3D资源(包括IDirect3d9Texture即D3DXCreateTextureFromFile创建)继承IUnknown-他们是COM对象,换句话说..Release()完成使用后,您需要COM对象:

for (int i=0; i<len; i++)
  if (m_Texture[i] != NULL)
    m_Texture[i]->Release();//decrement COM refcount to permit releasing the resource
delete[] m_Texture;
delete[] m_Material;
Run Code Online (Sandbox Code Playgroud)

您可能希望养成将重复逻辑包装到方便的RAII容器中的习惯.ATL内置了这样的东西,请参阅MSDN-docs CComPtr.警告:我之前从未使用过它,但如果您打算使用COM编写比玩具应用程序更大的东西,那么就像它一样.