Доброго времени суток!
Возникла необходимость в написании сабжа. Есть вопрос, касающийся поведения функции realloc()
Если указатель равен нулю - понятно, переход на malloc(size)
Если размер равен нулю - никто меня тапками не закидает, если это будет переход на free(ptr)
А как быть, если ptr ссылается на невалидную память? Что при этом возвращать? Валидность указателя определяется исходя из целостности всей кучи, и неправильный указатель может указывать не только за пределы динамической памяти, но и не на начало блока, либо на начало уже освобожденного блока. С free() - нет проблем, можно ничего не освобождать.
Короче, что надо вернуть: NULL или значение, переданное в параметрах, или правильный адрес блока ?
Спасибо за потраченное на меня время.
Стандарт говорит, что behavior is undefined:
Цитата
If ptr does not match a pointer earlier returned by the
calloc, malloc, or realloc function, or if the space has been deallocated by a call
to the free or realloc function, the behavior is undefined.
Я бы вернул NULL.
Цитата
Если размер равен нулю - никто меня тапками не закидает, если это будет переход на free(ptr)
упс, низзя, оказывается
http://www.mail-archive.com/linux-man@vger...g/msg00078.htmlЯ понял, почему: легче отловить точки освобождения памяти в тексте.
Цитата(_Pasha @ Feb 3 2009, 19:04)

упс, низзя, оказывается
Ага. Результатом malloc(0) будет валидный указатель...
Вернуть NULL, потому что после realloc следующим шагом проверка успешности операции путем сравнивая результата с NULL. А дальше программер сам сообразит при поиске ошибки.