В спецификации C говорится о функциях выделения памяти:
Если размер запрошенного пространства равен нулю, поведение определяется реализацией: либо нулевой указательили поведение такое, как если бы размер был некоторым ненулевым значением, за исключением того, что возвращенный указатель не должен использоваться для доступа к объекту.
Все ли функции распределения должны быть согласованы в этомрассматривать? Может ли malloc(0)
возвращать ненулевой указатель, а realloc(someptr, 0)
возвращает нулевой указатель?
Может ли calloc(0, 0)
отличаться от malloc(0)
? Для спецификации calloc()
было бы просто сказать, что calloc(nmemb, size)
эквивалентно malloc(nmemb * size)
с последующим обнулением памяти, но эта эквивалентность не является явной.