#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?
}
Я проверил его, и он, кажется, обнулился, но я не уверен, всегда ли это так?
memset(mem + 100, 0, 20); // is this even necessary? --› Да.
- personDavid C. Rankin  schedule15.04.2020
comment
Пожалуйста, обратите внимание, что mem = realloc(mem, 120); — не очень хорошая идея. См., например. stackoverflow.com/questions/38213123/ - personBob__  schedule15.04.2020
comment
Ваш тест ничего не доказывает. Данные по-прежнему были нулями из calloc().
- personuser207421  schedule16.04.2020
Функция realloc() изменяет размер блока памяти, на который указывает ptr, на размер байтов. Содержимое будет неизменным в диапазоне от начала региона до минимума старого и нового размеров. Если новый размер больше старого, добавленная память не будет инициализирована.
К этому комментарию:
Я проверил его, и он, кажется, обнулен
Это не окончательный тест. Как указано, realloc не предназначен для инициализации этих байтов каким-либо конкретным значением. Таким образом, нет никакой гарантии, что байты будут равны нулю (или любому другому значению), и на них никогда нельзя полагаться.
personkaylumschedule15.04.2020
comment
Хороший ответ; УФ. Второстепенный: realloc не касается этих байтов. больше похоже на спецификацию C. Любые байты в новом объекте, превышающие размер старого объекта, имеют неопределенные значения. Реализация может касаться новых байтов, а может и нет, может обнулить их и т. д. Важно то, что они информировать. Тонкость здесь в том, что realloc() не требуется их не трогать. Я мог видеть функцию безопасности, которая стирает память.
- personchux - Reinstate Monica; 16.04.2020
comment
@chux-ReinstateMonica Очень хороший момент. Я обновил то, что вы указали.
- personkaylum; 16.04.2020
memset(mem + 100, 0, 20); // is this even necessary?
--› Да. - person David C. Rankin   schedule 15.04.2020mem = realloc(mem, 120);
— не очень хорошая идея. См., например. stackoverflow.com/questions/38213123/ - person Bob__   schedule 15.04.2020calloc()
. - person user207421   schedule 16.04.2020