我正在研究3D引擎作为学校项目.我已经安装了虚拟泄漏检测器来摆脱内存泄漏(并且它工作,因为我不再获得任何这些转储).最近,我不小心让我的应用程序运行了5分钟...而我的电脑变得很慢.我通过注释掉行等来跟踪这个问题,但是我无法找到为什么在关闭应用程序之前C++不会释放我已清除的内存.
问题:"内部"内存泄漏,看起来C++只是在应用程序关闭后才删除内容
代码: 我的渲染代码(在pastebin Yz79Ck0b)
注意:我知道我不应该每次创建一个新的Mesh,但这不应该导致这个问题,对吧?我的IDE是Visual Studio 2008,我正在使用WIN32项目.当我取出纹理和模型时,我有0字节的内存增长.
正如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编写比玩具应用程序更大的东西,那么就像它一样.
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |