- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在研究一个 3D 引擎作为学校项目。我已经安装了虚拟泄漏检测器来消除内存泄漏(并且它起作用了,因为我不再得到任何这些转储)。最近,我不小心让我的应用程序运行了 5 分钟......我的 PC 变得非常慢。我已经通过注释行等找到了问题,但我无法找出为什么在我关闭应用程序之前 C++ 不会释放我清除的内存。
问题:“内部”内存泄漏,看起来 C++ 只会在应用程序关闭后删除某些内容
代码: My render code (at pastebin Yz79Ck0b)
注意事项:我知道我不应该每次都创建一个新的网格,但这不应该导致这个问题,对吧?我的 IDE 是 Visual Studio 2008,我使用的是 WIN32 项目。当我取出纹理和模型时,我有 0 字节的内存增长。
最佳答案
正如 Sanjit 所说,您必须使用 delete[]
来删除数组 - 正如 DeadMG 所说,RAII 容器是最好的做法,不会搞砸释放您的资源。
然而,尽管从文档中不是很明显,但显然所有 Direct3d resources (包括 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;
您可能想养成将重复逻辑包装到方便的 RAII 容器中的习惯。 ATL 内置了这样的东西,请参阅 CComPtr
上的 MSDN 文档.警告:我以前从未使用过它,但如果您打算使用 COM 编写比玩具应用程序更大的东西,那么类似的东西是一个非常好的主意。
关于带有 D3DX9 的 C++ - 内存大小以 10 MB/秒的速度不断增加 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4431624/
如果这不是一个错误,那就是另一个错误。如果不是那样的话,那就是别的东西了。我觉得我的项目已经改变了很多,现在只是试图解决代码签名问题,结果一切都搞砸了。我严格按照说明进行操作,但出现错误,例如当前的“
我不确定是否有一些我不知道的内置变量或规则,或者 make 是否有问题,或者我只是疯了。 对于我的一个项目,我有一个如下的 makefile: CC=g++ CFLAGS=-O3 `libpng-co
我有大约 10 个 div,它们必须不断翻转,每个 div 延迟 3 秒 这个 codrops 链接的最后一个效果是我正在寻找的,但无需单击 div http://tympanus.net/Devel
我如何使用 jQuery 持续运行 PHP 脚本并每秒获取响应,以及将鼠标上的少量数据发送到同一脚本? 我真的必须添加一些随机扩展才能让这么简单的计时器工作吗? 最佳答案 To iterate is
JBoss 4.x EJB 3.0 我见过如下代码(大大简化): @Stateless @TransactionAttribute(TransactionAttributeType.NOT_SUPPO
使用 PHPStorm,我试图忽略每次尝试进行 git 提交时 pop 的 workspace.xml。 我的 .gitignore 看起来像: /.idea/ .idea/workspace.xml
我是一名优秀的程序员,十分优秀!