Давайте рассмотрим этот очень короткий фрагмент кода:
#include <stdlib.h>
int main()
{
char* a = malloc(20000);
char* b = realloc(a, 5);
free(b);
return 0;
}
После прочтения справочной страницы для realloc я не был полностью уверен, что вторая строка приведет к освобождению 19995 дополнительных байтов. Процитируем справочную страницу: Функция realloc() изменяет размер блока памяти, на который указывает ptr, на размер байтов.
, но исходя из этого определения, могу ли я быть уверен, что остальные будут освобождены?
Я имею в виду, что блок, на который указывает b
, безусловно, содержит 5 свободных байтов, поэтому будет ли достаточно, чтобы ленивый соответствующий аллокатор просто ничего не делал для строки realloc?
Примечание: аллокатор Я использую кажется, чтобы освободить 19 995 дополнительных байтов, как показано valgrind при комментировании строки free(b)
:
==4457== HEAP SUMMARY:
==4457== in use at exit: 5 bytes in 1 blocks
==4457== total heap usage: 2 allocs, 1 frees, 20,005 bytes allocated