2012-04-03 70 views
2

我有一個問題,使用更多的內存比我想應該監控/調試內存使用ç

我用Valgrind的,它一直爲發現內存問題,如緩衝區溢出和內存天賜我的程序泄漏

問題我這裏的是,它看起來並不像它的泄漏,只是使用情況是什麼,我認爲它應該是

不一致是否有另一種工具,您可以用它來監視內存的使用情況用同樣的方法可以使用gdb等調試器監視變量值?

地塊已經告訴我,堆內存中的最大份額正在通過這一說法分配:

->98.80% (1,338,700,288B) 0x40341D5: caa (caa.c:196) 

的聲明是一個調用上推一個元素到UT_array,例如

utarray_push_back(utarr_ctr_pdws, &pdw); 

PDW是一個指向一個結構,是一個堆棧變量

所以它似乎UT_array是mallocing是沒有得到釋放的內存,但我有另一種說法幾行明確下來做此:

utarray_free(utarr_ctr_pdws); 

的UT_array只是指針數組因此不需要在UT_ICD輔助結構所定義的任何附加的析構函數功能。

如果任何人有任何使用UT_arrays的經驗,也許你可以闡明爲什麼它使用了這麼多的內存?

+2

你可以嘗試地塊,一個Valgrind的工具,以顯示堆分配。即使你沒有嚴格泄漏(你仍然保留一個指向分配內存的指針),它會告訴你你在哪裏分配大量的內存。 – BoBTFish 2012-04-03 15:25:26

+0

看起來不錯 - 現在就試試吧...... – bph 2012-04-03 15:39:11

+0

根據我的經驗,如果valgrind顯示錯誤,則說明存在問題。我可以發佈有問題的代碼? – eyalm 2012-04-03 16:16:57

回答

0

我懷疑你的pdw結構中有一些你已經分配空間的東西。 utarray_free將不知道結構的成員,所以它只會釋放指向結構本身的指針。如果你爲struct的任何成員擁有malloc'd空間,utarray_free將不知道如何清除它們,除非你在UT_icd中設置了一個dtor函數來釋放alloc的struct成員。