Да, cptr
станет недействительным, поскольку realloc перемещает блок! И нет, нет никаких упоминаний о том, что вам нужно сказать, что он перемещает блок памяти. Кстати, ваш код выглядит ненадежно ... читайте дальше ... пожалуйста, посмотрите мой ответ на другой вопрос и внимательно прочитайте код о том, как он использует realloc
. Общее согласие таково, если вы сделаете это:
void *ptr = malloc(1024);
/* later on in the code */
ptr = realloc(ptr, 4096);
/* BAM! if realloc failed, your precious memory is stuffed! */
Способ обойти это - использовать временный указатель и использовать его, как показано:
void *ptr = malloc(1024);
/* later on in the code */
void *tmp = realloc(ptr, 4096);
if (tmp != null) ptr = tmp;
Редактировать: Спасибо Защищено за указание гремлина, который закрался, когда я набирал это ранее.