下面的代碼在Windows中執行時返回一個地址,但我期待它返回NULL。爲什麼malloc(0)在Windows中返回一個非空地址?
int main()
{
char *ptr = NULL;
ptr = malloc(0);
printf("malloc returned = %u\n", ptr);
}
什麼能促使的malloc這樣的實現?它背後有什麼理由嗎?
因爲這是一個0字節的內存,我沒有試驗寫入任何數據。但是,這個記憶可以用於任何事情嗎?
+1,因爲我實際上已經看到1個人使用這個來獲得他的「優勢」,當他不想特殊情況下可以增加malloc'd/realloc內存非常大的循環。 – JimR 2012-03-15 15:47:18
雖然你可以傳遞一個空指針到'realloc',所以這個竅門絕不是必須的。你也可以'void * p = 0;'。 – 2012-03-15 16:04:22
@Steve這不是一個詭計。這是編程和鬆散平臺規範的人爲因素。例如,在沒有測試的情況下,HeapRealloc(heap,HEAP_REALLOC_IN_PLACE_ONLY,0,4)如何表現並不清楚。 – ActiveTrayPrntrTagDataStrDrvr 2012-03-15 16:08:35