Обычно единственный способ проверить успешность функций-распределителей - проверить возвращаемый указатель с помощью вызова realloc()
против указателя NULL
. Если возвращенный указатель не NULL
, вы можете быть уверены, что вызов успешен.
Следуя линии, подход, как
pointer = realloc (pointer, newValue);
проблематично, как и в случае сбоя realloc()
, цитата из C11
, глава §7.22.3.5,
[....] Если память для нового объекта не может быть
выделенный, старый объект не освобожден и его значение не изменилось.
и
Функция realloc
возвращает указатель на новый объект (который может иметь тот же
значение как указатель на старый объект), или нулевой указатель, если новый объект не может быть
выделено.
Таким образом, возвращенный нулевой указатель перезапишет предыдущий действительный адрес памяти, и вы потеряете доступ и утечку памяти. Безопасный курс действий до
type tempPOinter = NULL;
tempPOinter = realloc(oldPointer, newSize);
if (tempPOinter) {
oldPointer = tempPOinter;
}
else {
printf("Failure in realloc!!");
free(oldPointer);
return -1;
}