Требуется ли malloc () перед realloc ()? - PullRequest
25 голосов
/ 16 декабря 2010

Поскольку я прочитал realloc, он будет действовать как malloc, если указанный размер равен 0, я использовал его без malloc (), при условии, что указатель был статическим, глобальным или явно установлен на NULL, если автоматический.

Тем не менее, я заметил, что многие программисты пытаются установить его или установить в malloc (1). Это нужно?

Ответы [ 2 ]

25 голосов
/ 16 декабря 2010

С Спецификации открытых групп :

Если ptr - нулевой указатель, realloc () должен быть эквивалентен malloc () для указанный размер.

Если ptr не соответствует указателю возвращенный ранее calloc (), malloc () или realloc () или если пробел ранее был освобожден вызов free () или realloc (), поведение не определено.

10 голосов
/ 16 декабря 2010

malloc не требуется, вы можете использовать только realloc.

malloc(n) эквивалентно realloc(NULL, n).

Однако часто яснее использовать malloc вместо специальной семантики realloc. Дело не в том, что работает, а в том, чтобы не путать людей, читающих код.

(Изменить: удалено упоминание о realloc, действующем как free, поскольку это не стандартная C. См. Комментарии.)

...