我不明白為什么這里的免費不起作用,我仍然在 printf 中得到 5。我應該將 p 值指向 NULL 嗎?我搜索了很多執行緒,但沒有找到任何有用的資訊。
#include<stdio.h>
void main(){
int *p = malloc(sizeof(int));
*p = 5;
free(p);
printf("%d\n",*p);
}
uj5u.com熱心網友回復:
該函式被稱為freenot erase,它不會“擦除”指標指向的記憶體,它只是允許該記憶體區域用于其他用途。printf列印了先前的值,這意味著沒有其他任何事情發生使用剛剛釋放的記憶體。
無論如何,您仍在嘗試訪問不再屬于您的記憶體,因此會呼叫未定義的行為。代碼可能會崩潰,或者列印以前的值,或者列印垃圾,或者它可能會在控制臺上繪制一個獨角獸,這就是導致未定義行為......未定義的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/439322.html
上一篇:我可以使用fscanf在我的file.txt中讀取一個字符陣列和一個用逗號分隔的整數嗎(在C中)
下一篇:C-如何在宏中使用多個函式?
