Я выделения памяти с помощью malloc
:Динамическое распределение памяти для цикла
main()
{
int *array;
int i;
for(i = 0; i<40; i++)
{
array = malloc(100 * sizeof(int));
}
free(array);
}
Это должно выделить 15.625KB
, но если я запускаю это же в valgrind
, пик памяти 15.92KB
.
Как это происходит?
Как освободить все 40 указателей?
фрагментация кучи, вероятно, – EdH
Я думаю, что выделено более 400 байт, то есть 408 байт должно быть выделено за вызов malloc. Может быть, внутренние данные кучи, такие как следующий/предыдущий указатель? – bkausbk
Ваш код содержит ошибку: вы должны сохранить каждый указатель, возвращенный из malloc, и освободить этот указатель в отдельности. Вы освобождаете только последний указатель. Это приводит к задержке памяти у 39 указателей, ранее выделенных. – CouchDeveloper