2010-12-16 42 views
19

因爲我讀了realloc將作爲malloc如果指向的大小爲0,我沒有malloc()使用它,只要指針是靜態的,全局的,或者自動顯式設置爲NULL。在realloc()之前需要malloc()嗎?

但是,我注意到很多程序員試圖設置它或將其設置爲malloc(1)。需要嗎?

回答

19

Open Groups' specifications

如果ptr爲空指針,realloc()的 應當相當於malloc()函數用於 指定的大小。

若ptr不匹配,如果空間 先前已經由 呼叫釋放釋放()的指針 ,由calloc早期()返回, 的malloc(),或realloc()或或realloc() 行爲未定義。

6

malloc不是必需的,您只能使用realloc

malloc(n)相當於realloc(NULL, n)

但是,使用malloc代替realloc的特殊語義通常會更清楚。這不是什麼有效的問題,但不會讓閱讀代碼的人感到困惑。

(編輯:realloc演技去除提到作爲free,因爲它不是標準C.見註釋)。

+3

要知道,對於大小爲0的realloc C99標準從POSIX標準略有不同。 C99標準說明了這一點:*如果請求的空間大小爲零,則行爲是實現定義的:返回空指針或行爲就好像大小非零值*。 – JeremyP 2010-12-16 09:57:10

+0

所以當p不是NULL時,可以做「p = malloc(n)」,後跟「realloc(p,0)」嗎?我真的不會這樣做!對不起,關於格式 – dubnde 2010-12-16 10:37:45

+0

傑里米,是不是涉及'請求'的大小?這與重新分配前一個指針有什麼關係? – 2010-12-16 10:52:53

相關問題