这个C代码(编译为C ++)不会释放内存。该程序在“新”行上以992kB开始,然后在分配内存后,它变为10MB。释放内存后,它只会降至3MB。即使执行删除[]也不会删除内存。我做错了什么?
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;
答案 0 :(得分:0)
内存管理有多种方法。 例如,您可以在wikipedia中找到其中一些解释。我以前常常看到dlmalloc,但显然还有很多其他技术。
在任何情况下,所有技术都需要scafdolding,并且其中一些技术试图猜测程序员关于内存管理的下一步行动,所以唯一的方法是确保你已经完全将所有内存都归还给了操作系统将退出您的程序。