我使用三角网格库来计算三角网格的每个顶点上的曲率。为了做到这一点,我做了以下工作:
TriMesh *m = TriMesh::read(this->fichier);
m->need_curvatures();
float *degres= new float[nbr_vertices];
for(int i=0;i<nbr_vertices;i++)
{
degres[i]=m->curv1[i]; // get the curvature
}
delete [] degres; m->clear(); delete m;
问题是,即使我清除并删除了"* m“,也检测到内存泄漏。"valgrind“检测到内存泄漏。
下面是valgrind的输出:
912 bytes in 3 blocks are possibly lost in loss record 5 of 13
==4239== at 0x4C2CC70: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==4239== by 0x4012E54: _dl_allocate_tls (dl-tls.c:296)
==4239== by 0x5174DA0: pthread_create@@GLIBC_2.2.5 (allocatestack.c:589)
==4239== by 0x599C905: ??? (in /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0)
==4239== by 0x4C67D2: trimesh::TriMesh::need_normals() (in /home/spin/spin)
==4239== by 0x4B203D: trimesh::TriMesh::need_curvatures()
有什么办法来解决这个问题吗?
谢谢。
发布于 2015-06-16 04:17:06
912 bytes in 3 blocks are 可能是 lost in loss record 5 of 13
可能的损失可能只是缓存或指针技巧,912字节几乎不是问题。除非它有几兆字节,否则我会忽略它,特别是如果它在库中,而不是在你的代码中。
对于这个问题,它真的应该是一个更大的东西,并且通常是随着运行时间的延长而增长的行为。如果每次调用的大小是1千字节,而您正在执行数千或数百万次,则需要将其报告给库创建者
简而言之,没有证据表明是真正的泄密。
在循环中运行它,看看它是否在不稳定的情况下显著增长,否则您可以忽略它。
https://stackoverflow.com/questions/30828155
复制相似问题