Reallo c после callo c обнуляет байты? - PullRequest
1 голос
/ 15 апреля 2020

Я читал: " Как восстановить c часть памяти, выделенной с помощью callo c? ". Теперь мне интересно, будет ли realloc, за которым следует calloc, обнулять новые байты, если блок больше.

Глупый пример:

#include <stdlib.h>
#include <string.h>

int test() {
  char *mem;

  mem = calloc(100, 1);
  mem = realloc(mem, 120);
  memset(mem + 100, 0, 20); // is this even necessary?
}

Я проверил это, и оно, кажется, обнулено - но я не уверен, всегда ли это так?

1 Ответ

5 голосов
/ 15 апреля 2020

Нет, realloc не обнуляет новые байты. Так сказано в руководстве reallo c :

Функция reallo c () изменяет размер блока памяти, на который указывает ptr, на размер в байтах. Содержимое будет неизменным в диапазоне от начала региона до минимума старого и нового размеров. Если новый размер больше старого, добавленная память не будет инициализирована .

К этому комментарию:

Я протестировал это, и кажется, обнуляется

Это не окончательный тест. Как указано, realloc не определен для инициализации этих байтов каким-либо конкретным значением. Таким образом, нет никакой гарантии, что байты будут равны нулю (или любому другому значению) и на них никогда не следует полагаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...