I never had the use case to allocate 0 bytes of memory.
If I would allocate 0 bytes of memory and get a pointer to it, I wouldn't care what the value of the pointer is since I am not allowed to dereference it anyways.
But then again, why would I allocate 0 bytes of memory?
Sometimes it shakes out simpler for a generic container.
Ex: a vector using only a counter and pointer - you can use realloc() with fewer pointer validity checks.