Мой вопрос немного запутанный, но то, что я прошу, это то, что делает realloc
с левым над данными, когда он сводит к минимуму его буфер? Например, давайте просто скажем, что у меня был буфер, заполненный 50 байтами (при условии, что мой буфер может содержать до 50 байтов данных). Позже в моем коде я изменяю размер моего буфера с realloc
, чтобы теперь удерживать до 30 байт. Что делает realloc
с левым над 20-байтом?Когда я перераспределяю буфер на меньшее, удаляет ли он данные в буфере, пока не достигнет нужного размера?
ответ
realloc
точно malloc
+ memcpy
+ free
, за исключением того, что иногда это удается сделать это на месте и указатель возвращается численно равен указателю вы положили в (но вы никогда не можете полагаться на это). Остальные 20 байтов освобождаются.
От стандарта C, 7.22.3.5
перераспределить функции
realloc
функция освобождает старый объект, на который указываетptr
и возвращает указатель на новый объект, который имеет размер, указанныйsize
. Содержимое нового объекта должно быть таким же, как и у старого объекта до освобождения, вплоть до меньшего размера нового и старого. Любые байты нового объекта за пределами размера старого объекта имеют неопределенные значения.
смотри также http://en.cppreference.com/w/c/memory/realloc или http://pubs.opengroup.org/onlinepubs/9699919799/functions/realloc.html
@FumerianGaming Не нужно писать, спасибо, но я понимаю желание. Если вам нравится отвечать только на upvote, и если это решение вашей проблемы, тогда вы должны отметить ее как правильный ответ. –
не было бы зависит от реализации? если нет давления памяти, логическая задача - ничего не делать, кроме изменения максимального размера буфера. –
Я не уверен, что я новичок в c, поэтому пока не знаю всех механиков. –
Это был скорее риторический вопрос. –