2015-06-19 60 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,而且他们中的一些人试图猜测程序员下一步关于内存管理的动作,因此唯一的办法就是确保您已经完全将所有内存归还给操作系统是退出你的程序。