Why allocating a 0 size char
block works in this case? But if I write char *string = NULL;
it won\'t work.
I\'m using Visual Studio.
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, thenmalloc()
returns eitherNULL
, or a unique pointer value that can later be successfully passed tofree()
.
a call like malloc(0)
is valid itself, but then, we need to check the validity of the returned pointer. It can either
NULL
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.