Что содержит расширенная память, полученная с помощью realloc? - PullRequest
0 голосов
/ 01 октября 2018

Когда я использую realloc для изменения размера памяти, которую я использовал calloc ранее для инициализации (массив), она все еще остается 0 во всем буфере?или новая часть не инициализирована?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Учитывая, что вы увеличиваете размер выделенной памяти, область памяти расширенной будет иметь неопределенные значения.

Цитирование C11, глава §7.22.3.5, ( emphasis mine )

[...] Содержимое нового объекта должно быть таким же, как и у старого объекта до освобождения, вплоть до меньшего из нового и старогоразмеры. Любые байты в новом объекте, превышающие размер старого объекта, имеют неопределенные значения.

0 голосов
/ 01 октября 2018

Нет, к сожалению, realloc не будет инициализировать "новую" часть, которая выделена.Так что ты должен сделать это сам.«Старая» часть сохранит свою ценность, поэтому, если вы ее не изменили, все ваши 0 все равно будут там.

...