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.
That's quite ok.
The documentation implies that it's argument must be string, if it's something else, such as a null pointer, it's anyones 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 behavor if you pass them something you're not supposed to. Many standard C function such as strcpy, strlen does not accept null pointers either.
strdup
returns NULL in case of allocation failure.
This is not allocation failure. The behavior when a wild pointer is passed in is undefined. You're required to pass in a valid pointer to a NUL-terminated string.
I think that it is expected behaviour.
Of course, all the answers are correct. Nonetheless, in case of strdup(), it would be nice to have it to be able to deal with null pointers, too - just return a "null" string too, in that case. Of course, it is easy to define a strdupnullok() function with that behaviour as a wrapper around strdup(), but it is then an additional wrapper and function call, so makes code a tiny bit slower.
精彩评论