Этот код C (скомпилированный как C ++) не освобождает память. Программа начинается с 992 КБ в новой строке, затем после выделения памяти она достигает 10 МБ. После освобождения памяти она уменьшается до 3 МБ. Даже удаление [] не стирает память. Что я делаю неправильно?
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;
Существуют различные подходы к управлению памятью.
Например, вы можете найти объяснение некоторым из них в википедия. Я привык видеть вокруг dlmalloc, но, очевидно, есть много других техник.
В любом случае, все методы требуют scafdolding, а также некоторые из них пытаются угадать следующие шаги по управлению памятью программистом, поэтому единственный способ убедиться, что вы полностью вернули всю память в ОС, это выйти из вашего программа.