![](/img/trans.png)
[英]What is a glibc free/malloc/realloc invalid next size/invalid pointer error and how to fix it?
[英]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.