malloc(0)
может (это определяется реализацией) возвращать нулевой указатель или может возвращать новый указатель каждый раз, когда вы вызываете его. В любом случае возвращаемое значение действительно для передачи на free
, так как free(0)
в любом случае не работает. Однако из-за некоторых неприятных проблем с обнаружением и обработкой сбоя realloc
и разногласий между ISO C и POSIX я настоятельно рекомендую никогда передавать размер от 0 до malloc
или realloc
. Вы всегда можете просто добавить +1
или |1
в конец аргумента к malloc
, и тогда вы обязательно получите уникальный указатель (отличный от нулевого указателя или адреса любого другого объекта) каждый раз Вы называете это.
Другая причина не использовать malloc(0)
заключается в том, что вы всегда должны проверять возвращаемое значение malloc
, чтобы обнаружить ошибку, тогда как malloc(0)
может возвращать нулевой указатель в случае успеха. Это делает весь ваш код проверки ошибок более сложным, так как вы должны использовать специальный случай без ошибок, где аргумент размера был 0.