开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜