簡體   English   中英

strdup在傳遞NULL時轉儲核心

[英]strdup dumping core on passing NULL

strdup(null)轉儲核心。

嘗試了ubuntu和freeBSD。

為什么? 它不應該返回null嗎?

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

這將在strdup調用上轉儲核心。

那很好。

文檔暗示它的參數必須是字符串,如果它是其他東西,比如空指針,那么任何人都猜測會發生什么。 實質上,在將NULL指針傳遞給strdup時會出現未定義的行為。

如果你傳遞一些你不應該的東西,那么函數產生未定義的行為是很正常的。 許多標准的C函數如strcpy,strlen也不接受空指針。

在分配失敗的情況下, strdup返回NULL。

這不是分配失敗。 傳入Wild指針時的行為是未定義的。 您需要傳入一個指向NUL終止字符串的有效指針。

當然,所有答案都是正確的。 盡管如此,在strdup()的情況下,讓它能夠處理空指針也是很好的 - 在這種情況下也只返回一個“null”字符串。 當然,很容易將strdupnullok()函數定義為strdup()的包裝器,但它是一個額外的包裝器和函數調用,因此使代碼變得慢一點。

我認為這是預期的行為

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM