關於malloc(0)返回值的一些看法

題目來自https://www.jobui.com/mianshiti/it/qianrushi/5829/

以下是原文

下面的代碼片段的輸出是什麼,爲什麼?

char *ptr;

if ((ptr = (char *)malloc(0)) == NULL)

puts(“Got a null pointer”);

else

puts(“Got a valid pointer”);

這是一個有趣的問題。最近在我的一個同事不經意把0值傳給了函數malloc,得到了一個合法的指針之後,我纔想到這個問題。這就是上面的代碼,該代碼的輸出是“Got a valid pointer”。我用這個來開始討論這樣的一問題,看看被面試者是否想到庫例程這樣做是正確。得到正確的答案固然重要,但解決問題的方法和你做決定的基本原理更重要些。

其實malloc(0)返回的不是空指針也不足爲其,在linux下用man命令查看malloc函數

The  malloc() function allocates size bytes and returns a pointer to the allocated memory.  The memory is not initialized.  If size is 0, then malloc() returns either NULL, or a unique pointer value that can later be successfully passed to free().

說明它確實會有可能申請內存成功的。

malloc申請的內存,一般都會比實質申請的要大,它會去堆空間裏面找出一塊>=需要申請的內存大小的空閒內存出來,所以malloc裏面0值的處理應該是和其他的一樣的,就算申請出來,也不會使用它。比如,你申請了一個20字節的空間,malloc返回的是25個字節的空間,你會去使用超出20字節的空間嗎?我覺得,malloc開發時就考慮到大家都不會用malloc去申請一個0大小的空間,因爲這樣沒意義,所以也沒必要去判斷申請的內存大小是否爲0了。返回NULL一般是沒有足夠的空間了,申請空間失敗才返回NULL。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章