很簡單的問題,我提出了以下方案:零大小的malloc
#include <stdlib.h>
int main(int argc, char ** argv)
{
void * ptr;
ptr = malloc(0);
free(ptr);
}
而且它不會在我的機器上出現段錯誤。它是stdlib malloc和free的可移植行爲,還是我在尋找麻煩?
編輯:似乎不便攜是由malloc返回的值。問題是關於malloc(0)+自由組合,而不是ptr的值。
請記住,如果這個不奏效,還有不得不有很多特殊情況碼。人們總是會根據變量或表達式來分配大量字節,並且每次都必須檢查零是很尷尬的。 – 2009-10-26 13:33:51
相關:http://stackoverflow.com/questions/2022335/whats-the-point-in-malloc0 – jldupont 2010-01-07 18:23:46
我知道:超級晚評論這個封閉的問題。但是`malloc(0)`有一些用法,沒有提到。在那些返回非NULL值的實現中,尤其是在DEBUG構建中,它可能會分配比您要求的更多的值,併爲您提供指向剛剛經過其內部頭的指針。如果在一系列分配之前和之後得到這個值,這可以讓你感覺到實際的內存使用情況。 – 2017-02-24 17:57:13