malloc Function

Q

Why does malloc(0) return valid memory address? What's the use?

✍: FYIcenter

A

malloc(0) does not return a non-NULL under every implementation. An implementation is free to behave in a manner it finds suitable, if the allocation size requested is zero. The implmentation may choose any of the following actions:

* A null pointer is returned.

* The behavior is same as if a space of non-zero size was requested. In this case, the usage of return value yields to undefined-behavior.

Notice, however, that if the implementation returns a non-NULL value for a request of a zero-length space, a pointer to object of ZERO length is returned! Think, how an object of zero size should be represented?

For implementations that return non-NULL values, a typical usage is as follows:

void func ( void ) {
   int *p; /* p is a one-dimensional array,
   whose size will vary during the
   the lifetime of the program */
   size_t c;
   p = malloc(0); /* initial allocation */
   if (!p) {
      perror ("FAILURE");
      return;
   }
   /* ... */
   while (1) {
      c = (size_t) ...; /* Calculate allocation size
*/
      p = realloc ( p, c * sizeof *p );
      /* use p, or break from the loop */
      /* ... */
   }
   return;
}

Notice that this program is not portable, since an implementation is free to return NULL for a malloc(0) request, as the C Standard does not support zero-sized objects.

2007-02-26, 6661👍, 0💬