Содержимое «вновь выделенной части объекта не определено». Ваш контент все еще будет в начале возвращенной области памяти.
Скажи, что я делаю:
char *p = malloc(6);
if(p == NULL) { ... }
memcpy(p, "Hello", 6);
char *temp = realloc(p, 12);
if(temp == NULL) { ... }
p = temp;
Первые 6 символов в p
гарантированно будут 'H', 'e', 'l', 'l', 'o', '\ 0', независимо от того, является ли новый p
одинаковым как старый p
. Остальные 6 «новых» символов - это все, что не определено.