Давайте рассмотрим этот очень короткий фрагмент кода:
#include <stdlib.h>
int main()
{
char* a = malloc(20000);
char* b = realloc(a, 5);
free(b);
return 0;
}
После прочтения man-страницы realloc я не был полностью уверен, что вторая строка приведет к освобождению дополнительных байтов 19995. Чтобы процитировать справочную страницу: The realloc() function changes the size of the memory block pointed to by ptr to size bytes.
, но из этого определения я могу быть уверен, что остальное будет освобождено?
Я имею в виду, что блок, на который указывает 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