2016-12-23 3 views
2

Мой вопрос немного запутанный, но то, что я прошу, это то, что делает realloc с левым над данными, когда он сводит к минимуму его буфер? Например, давайте просто скажем, что у меня был буфер, заполненный 50 байтами (при условии, что мой буфер может содержать до 50 байтов данных). Позже в моем коде я изменяю размер моего буфера с realloc, чтобы теперь удерживать до 30 байт. Что делает realloc с левым над 20-байтом?Когда я перераспределяю буфер на меньшее, удаляет ли он данные в буфере, пока не достигнет нужного размера?

+3

не было бы зависит от реализации? если нет давления памяти, логическая задача - ничего не делать, кроме изменения максимального размера буфера. –

+0

Я не уверен, что я новичок в c, поэтому пока не знаю всех механиков. –

+1

Это был скорее риторический вопрос. –

ответ

7

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

+2

@FumerianGaming Не нужно писать, спасибо, но я понимаю желание. Если вам нравится отвечать только на upvote, и если это решение вашей проблемы, тогда вы должны отметить ее как правильный ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^