2012-09-09 67 views
1

可能重複:
what's the point in malloc(0)?
what does malloc(0) return?malloc(-1)返回NULL,但malloc(0)不是爲什麼?你怎麼能0分配內存空間

此代碼顯示 「不成功的」,但如果你更換-1 0它不會是NULL。我不明白你如何分配0內存空間。我知道有沒有用,但不爲NULL == 0L所以它應該是== 0太..

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
int *ptr; 
if((ptr = malloc(-1)) == NULL) 
    printf("unsuccessful: no memory space was allocated.\n"); 
else{ 
    printf("successful: memoryspace was allocated. \n"); 
    free(ptr); 
} 
getch(); 
return 0; 

} 
+0

當'malloc'返回'NULL'失敗時,它應該設置'errno'並且你應該打印'strerror(errno)' –

+2

「我不知道如何分配0個內存空間」 - 不要調用malloc()!! –

+0

是的,我傾向於用一種清理方式分配東西(或者什麼也沒有)的多種可能性。不需要檢查是否調用了'malloc'。從C++類的角度來看它更有意義,但我想它可能發生在C. – chris

回答

10

這是實現定義:

7.22.3-1

如果空間不能分配,則返回空指針。如果 的空間大小的要求是零,則該行爲 實現德網絡定義:返回要麼一個空指針,或者 行爲就如同大小是一些非零值,除了 返回的指針不得被用來訪問一個對象。

所以可以返回NULL,但它不來。此外,澄清爲何malloc(-1)失敗,注意到它的原型是:

void *malloc(size_t size); 
      ^^^^^^ 

所以你轉換-1無符號類型,產生非常大的值。

相關問題