簡體   English   中英

釋放未初始化的指針會導致未定義的行為嗎?

[英]Does freeing an uninitialized pointer result in undefined behavior?

如果你有一個未初始化的指針,並且錯誤地嘗試釋放它,這是否會導致未定義的行為?

喜歡:

int main(void){

    char *string;
    free(string);

    return 0;
}

釋放未初始化的指針會導致未定義的行為嗎?

是。

但是,釋放空指針是明確定義的。

從C99標准:

free函數導致ptr指向的空間被釋放,即可用於進一步分配。 如果ptr是空指針,則不執行任何操作。 否則,如果參數與callocmallocrealloc函數先前返回的指針不匹配,或者如果通過調用freerealloc釋放了空間,則該行為是undefined

是的,因為訪問任何未初始化的變量會引發未定義的行為。

這包括將一個uninitialise指針傳遞給free() 這本身還包括“意外”未初始化指針的值可能等於NULL

是的,這是未定義的行為。

傳遞給free的指針應該是指向使用malloccallocrealloc或空指針分配的有效對象的指針。

從C99:

(7.20.3.2p2)“如果ptr是空指針,則不執行任何操作。否則,如果參數與calloc,malloc或realloc函數先前返回的指針不匹配,或者如果空間已被調用解除分配為了釋放或重新分配,行為是不確定的。“

是的,確實如此,因為您應該只free() 1.為NULL或2.是通過調用malloc()calloc()realloc()獲得的指針。

暫無
暫無

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

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