簡體   English   中英

為什么大小為“0”的 realloc 允許多次釋放指針但不允許大小為“0”的 malloc?

[英]Why realloc with size '0' allows to free the pointer multiple times but not malloc with size '0'?

我有以下代碼。

char *ptr2 = (char*)malloc(0);
char *ptr = (char*)malloc(sizeof(char) * 10);
memcpy(ptr, "Gunasek\0", 8);
ptr = (char*) realloc(ptr, 0);
printf("ptr = %p, ptr2 = %p\n", ptr, ptr2);
//ptr = (nil), ptr2 = 0x602420       (Output)
free(ptr);
free(ptr);//Works fine
free(ptr);//Works fine

free(ptr2);
free(ptr2);//Fails
free(ptr2);

誰能解釋為什么malloc(0)不允許多次免費但realloc(ptr, 0)允許?

多次釋放非空指針是未定義的行為(無論它來自malloc還是realloc )。 因此,了解您的特定實現的行為方式是無益的。 依賴這種行為也很危險,因為它可能會在未來甚至在不同的環境中發生變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM