2015-06-19 105 views
3

此C代碼(編譯爲C++)不釋放內存。該程序在'new'行開始時爲992kB,然後在分配內存後,達到10MB。釋放內存後,它只能下降到3MB。即使執行刪除[]也不會清除內存。我究竟做錯了什麼?未釋放C數組中的內存

INT iSize=8192; 

struct sUsernameA 
{ 
TCHAR *sUsername; 
}; 

sUsernameA *sArr = new sUsernameA[iSize](); 

for (INT i=0;i<iSize;i++) 
{ 
sArr[i].sUsername = (TCHAR*)calloc(512,sizeof(TCHAR)); 
} 


for (INT i=0;i<iSize;i++) 
{ 
free(sArr[i].sUsername);sArr[i].sUsername = NULL; 
} 

delete [] sArr; 
+4

你如何測量內存消耗? – Baltasarq

+9

這是一個關於StackOverflow的常見問題 - 大多數malloc實現爲新的分配維護一個內存池,所以在應用程序退出之前你不會看到任何被釋放的東西。 –

+0

另請參閱:http://stackoverflow.com/questions/30860188/does-free-free-the-memory-immediately –

回答

0

存在多種內存管理方法。 例如,您可以在wikipedia中找到一些解釋。我習慣看到dlmalloc,但顯然還有很多其他技巧。

在任何情況下,所有的技術都需要scafdolding,而且他們中的一些人試圖猜測程序員下一步關於內存管理的動作,因此唯一的辦法就是確保您已經完全將所有內存歸還給操作系統是退出你的程序。