[英]Does freeing an uninitialized pointer result in undefined behavior?
如果你有一個未初始化的指針,並且錯誤地嘗試釋放它,這是否會導致未定義的行為?
喜歡:
int main(void){
char *string;
free(string);
return 0;
}
釋放未初始化的指針會導致未定義的行為嗎?
是。
但是,釋放空指針是明確定義的。
從C99標准:
free
函數導致ptr
指向的空間被釋放,即可用於進一步分配。 如果ptr
是空指針,則不執行任何操作。 否則,如果參數與calloc
,malloc
或realloc
函數先前返回的指針不匹配,或者如果通過調用free
或realloc
釋放了空間,則該行為是undefined 。
是的,因為訪問任何未初始化的變量會引發未定義的行為。
這包括將一個uninitialise指針傳遞給free()
。 這本身還包括“意外”未初始化指針的值可能等於NULL
。
是的,這是未定義的行為。
傳遞給free
的指針應該是指向使用malloc
, calloc
, realloc
或空指針分配的有效對象的指針。
從C99:
(7.20.3.2p2)“如果ptr是空指針,則不執行任何操作。否則,如果參數與calloc,malloc或realloc函數先前返回的指針不匹配,或者如果空間已被調用解除分配為了釋放或重新分配,行為是不確定的。“
是的,確實如此,因為您應該只free()
1.為NULL
或2.是通過調用malloc()
, calloc()
或realloc()
獲得的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.