clinuxposixfreebsd

strdup dumping core on passing NULL


strdup(null) dumps core.

Tried in on ubuntu and freeBSD both.

why? Shouldn't it return null?

char *b = NULL;
a = strdup(b);

This will dump core on strdup call.


Solution

  • That's quite ok.

    The documentation implies that its argument must be a string. If it's something else, such as a null pointer, it's anyone's guess what'll happen. In essence, you get undefined behavior when passing a NULL pointer to strdup.

    It's quite normal for functions to yield undefined behavior if you pass them something you're not supposed to. Many standard C functions such as strcpy and strlen do not accept null pointers either.