我使用Trimesh库来计算三角网格的每个顶点上的曲率。要做,我做:
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;
&#13;
问题是检测到泄漏记忆,即使我清除并删除&#34; * m&#34;。 泄漏记忆由&#34; valgrind&#34;检测到。
这是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()
&#13;
有什么想法解决这个问题吗?
感谢。
答案 0 :(得分:1)
912 bytes in 3 blocks are
可能 lost in loss record 5 of 13
可能的丢失可能只是缓存或指针技巧,912字节几乎不是问题。除非它是几兆字节,否则我会忽略它,特别是如果它在库中而不在你的代码中。
对于这个问题,它确实应该是一个更大的范围,并且通常是一个随着更长的运行而增长的行为。如果每次调用一千字节,并且您正在进行数千或数百万次,则需要向库创建者报告
简而言之,没有真正泄漏的证据。
在循环中运行它,看看它是否在没有安定的情况下显着增长,否则你可以忽略它。