First let me state, as per the man page of malloc()
The malloc()
function allocates size bytes and returns a pointer to the allocated memory. The memory is not initialized. If size is 0, then malloc()
returns either NULL
, or a unique pointer value that can later be successfully passed to free()
.
a call like malloc(0)
is valid itself, but then, we need to check the validity of the returned pointer. It can either
- Return
NULL
- Return a pointer which can be passed to
free()
.
but anyways, dereferencing that pointer is not allowed. It will cause out-of-bound memory access and cause undefined behaviour.
That said, two important things to mention,
Please see why not to cast the return value of malloc()
and family in C
.
Please check the return value of malloc()
before using the returned pointer.
So, to answer your question,
Difference between initializing a string with (char *)malloc(0)
and NULL
Do not use malloc(0)
in this case, as a NULL check on the pointer may fail, giving the wrong impression of a valid allocation of the memory to the pointer. Always use NULL
for initialization.