2015-06-14 61 views
0

我正在使用Trimesh庫來計算三角網格的每個頂點的曲率。要做到,我做: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;

的問題是檢測連我清楚,並刪除 「* 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: [email protected]@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()

任何想法來解決這個問題?

謝謝。

+0

如果你使用valgrind,發佈它的輸出,但只是mem漏洞片段 –

+0

好吧,我把我的第一條消息放在 – ananass

+0

這可能是Trimesh發生內存泄漏。你可以使用-g編譯你的程序,並且禁用OpenMP並再次運行它,然後發佈Valgrind的輸出? – hayesti

回答

1

912 bytes in 3 blocks are可能lost in loss record 5 of 13

可能損失可能只是緩存或指針技巧和912個字節是很難的一個問題。除非數兆字節,否則我會忽略它,特別是如果它在庫中不在你的代碼中。

因爲這是一個問題,它確實應該是一個更大的量級,並且通常是一個隨着長時間運行而增長的行爲。如果它是每個電話一千字節,並且你做了數千或數百萬次,那麼它將需要被報告給圖書館創建者

總之,沒有證據表明真正的泄漏。

在一個循環中運行它,看看它是否顯着增長而沒有穩定下來,否則你可以忽略它。