Вы должны запрограммировать, как если бы старый указатель был перезаписан, да.Старая память больше не выделяется, поэтому может быть перераспределена другой частью вашей программы (или системным потоком, например) и записана в любой момент после вызова realloc.
Новая память всегда будет содержатьте же данные, которые присутствовали в старой памяти (хотя они копируются для вас при необходимости), но только до размера старого блока, любое дополнительное пространство, выделенное в конце, будет неинициализировано.
Есливам нужна копия, затем создайте новый malloc и используйте memcpy.
В отношении реализации, когда вы вызываете realloc до увеличения размера, может произойти одно из следующих действий:
- Новый блок выделяется и содержимое старой памяти копируется, старый блок освобождается, возвращается новый указатель.
- Если область после блока не выделена, существующий блок можетбыть расширенным и возвращен тот же указатель.
Поскольку у вас нет возможности узнать, что произошло, или даже если реализация полностью отличается отИспользуется предложенное выше, вы всегда должны кодировать в соответствии со спецификацией realloc, то есть вы не должны больше использовать старый указатель и использовать новый.