我遇到了這個奇怪的問題。基本上,我有一個循環,永遠循環,在循環的開始,我打開一個文件,我寫了一些東西的文件,然後在循環結束我關閉文件。工作正常循環的第一次迭代,但在第二次迭代,我得到該指針如何在同一時間爲空而不爲空?
*** glibc detected *** ./prog: double free or corruption (top):
循環的第二次迭代期間,我已經縮小下來到fclose(data)
線。顯然這個錯誤發生在你不止一次釋放某些東西的時候,但是在這段代碼中怎麼可能呢?
while(1)
{
if (data == NULL)
{
data = fopen(data_path, "w+");
}
/* do a bunch of stuff... */
if (data != NULL)
{
fclose(data);
}
}
陌生人的事情是,如果我fclose(data)
後添加以下行的程序運行得很好,沒有任何問題:
data = NULL;
可別人誰是更好地精通用C比我解釋一下這是怎麼回事在這?
用valgrind運行你的程序,它會自動告訴你它有什麼問題。 –
在'data'上調用'fclose'不會*使數據變成NULL指針;實際上,它不會(也不能)根本改變'數據'*的值。它所做的是導致不再是數據指向的內存位置的FILE對象。 – zwol