fclose時出現錯誤,c語言fclose帶來的記憶體錯誤

2022-11-12 07:51:42 字數 3274 閱讀 8954

1樓:憂鬱的頭皮屑

(gdb) p fp

$21 = (file *) 0x603fd0首先.p fp列印的是檔案指標.也就是fp的指標地址.而是檔案指標的內容...

你應該使用 p *fp檢視_fileno

如果不為-1.則檔案是被開啟的.

其實在fp前做個檢查就好了 ...

if(fp) fclose(fp);

還有一種辦法.如果你是linux的話.

在除錯的時候.在fclose之前打上斷點.執行到斷點的時候ps看下程式的pid.去proc裡看下檔案是否已經被關閉了...

具體路徑在/proc/pid/fd

ls -l一下.就可以看到開啟了哪些檔案.以及檔案描述符.如果沒有fopen開啟的檔案.就表示已經被關閉過了...

2樓:匿名使用者

你這個是安卓的**吧?把**貼的完整點

c語言fclose帶來的記憶體錯誤

3樓:匿名使用者

back_array用malloc申請了記憶體,退出函式前需要用free來釋放,不釋放就會有問題。

c語言:為什麼fclose(fp) 是錯的

為什麼c語言會出現檔案關閉失敗的情況

4樓:陳宗權

c語言關閉檔案用int fclose(file* fp)函式,可能有多種失敗原因。

1、錯誤的引數。傳遞給fclose的引數不是來自fopen、freopen或者tmpfile函式返回的正確檔案指標。如果用上述三個函式開啟檔案不成功而不檢查返回的檔案指標是否正確,甚至沒有給檔案指標賦值,最後再傳給fclose的時候也會關閉檔案失敗。

2、重複關閉檔案。如果在前面的執行流程的某個分支裡把檔案已經關閉了,在後面重復執行fclose關閉這個檔案,也導致關閉失敗。

3、磁碟空間滿或者磁碟故障。在寫檔案過程中,檔案內容並沒有真正存入磁碟空間,而是保留在緩衝區中,以便提高訪問速度。到關閉檔案時,系統要把緩衝區中的資料真正寫入到磁碟上,如果磁碟空間滿了或者磁碟有故障,關閉檔案就會失敗。

4、裝置檔案異常。c語言支援作業系統把各種裝置虛擬成的裝置檔案。關閉這些裝置檔案時,如果裝置異常(比如裝置斷開了),關閉檔案也可能會失敗。

5樓:

你關閉工作空間就可以了,在左上角。

6樓:猿動力

你查查是不是stu.dat被別的程式開啟了

c語言中的fclose函式該怎麼用?

7樓:匿名使用者

fclose()函式功能為:關閉一個流,把緩衝區內最後剩餘的資料輸出到磁碟檔案中,並釋放檔案指標和有關的緩衝區。( fopen()開啟一個流 )

標頭檔案:      #include

函式原型:   int fclose(file *stream);

說明:    如果流成功關閉,fclose 返回 0,否則返回eof(-1)。 出錯的原因包括:

傳給函式的檔案指標不合法,程式執行時遇到中斷訊號或是作業系統出現故障等等,可通過檢視errno值來確定出錯原因。

因此,正確的使用方法為:

if ( fclose(fp) )

但,一般我們寫練習**時,碰上出錯的可能性比較小,而且,程式基本上就是執行一次,所以常常不做錯誤檢查。直接寫成fclose(fp);

建議:使用正確的方法書寫**,養成良好的編碼習慣,提高程式健壯性,提高程式的可維護性。

8樓:

用fopen()開啟檔案後如果不呼叫fclose()關閉則不可以被其他程式操作~

所以fopen()開啟後操作完成時要呼叫fclose()關閉

9樓:

加個if使程式顯得更加健壯,考慮一切可能發生的情況,有可能關閉檔案失敗.

fclose(file* fp),傳遞的引數為file型別的指標.

一般沒必要判斷,但以後你到公司了,如果想寫出質量很高的**,就應該加判斷.因為當你以後和一個團體一起做專案的時候,除錯程式時,要考慮很多問題,你首先把這個做了,就可以減少維護和除錯的工作量.

現在你可能不明白,等以後參加工作了,就會理解了.

c語言檔案關閉函式fclose(檔案指標)疑問

10樓:滄海雄風

第一行內容已經讀到記憶體變數 char line裡面了啊

然後把line的內容顯示到編輯框裡了 沒毛病啊

11樓:風若遠去何人留

fclose函式為c語言標準庫函式,用來關閉一個已開啟的檔案。

該函式在stdio.h中宣告,原型為:

int fclose(file *fp);

當fclose被呼叫時,一個開啟的檔案(以檔案指標fp標識)會被關閉,關閉後,無法再對fp執行讀寫操作。

如果關閉成功,返回0,否則返回負值。

c語言檔案操作的標準流程為

1 fopen開啟檔案;

2 通過各種讀寫函式,讀寫檔案;

3 所有操作結束後,呼叫fclose關閉檔案。

12樓:匿名使用者

檔案開啟的時候,值已經給了 line;

當你檔案關閉後,line 的值還是在的;

所以,還能把 line 的值給編輯框

13樓:

fgets(line, sizeof(line), fp)函式如果成功返回,此時已經將檔案中的第一行讀取到本地緩衝區line中,所以即使檔案已關閉緩衝區的內容不會受到影響。

也就是說,setdlgitemtext(hwnd,idc_edit1,line)可以吧檔案資訊寫到編輯框。

14樓:匿名使用者

假如檔案是儲存在硬碟上,那麼所有內容是用磁化的方法寫的,能掉電不丟失。

你的程式將檔案開啟後,將其內容的第1行讀入了計算機的隨機儲存器中(具體就是line陣列)

關閉檔案後,檔案仍然保持不變

line陣列已經讀到了資料,這些資料雖然等於檔案的第1行,但已經與檔案沒有關係了,你使用和修改這些資料不會影響到檔案,除非你再開啟這個檔案向裡邊寫。

在編輯框中輸出的是line陣列的內容,它確實與檔案的第1行內容相同!以後檔案內容改了,你還要輸出的話,需要再開啟檔案讀一遍。

15樓:

你開啟檔案後,把第一行讀取到了line字元陣列中,顯示到編輯框上的內容是line裡面的,和檔案已經沒有關係了!

c語言錯誤,c語言錯誤怎麼辦?

c語言錯誤的原因 1 編譯階段,執行的是對單個檔案的轉換,從源 轉換成二進位制檔案。c語言 程式設計錯誤 除錯了一下,問題在於字串輸入後沒有清stdin流殘餘資料,故變數ch沒有獲得正確值。修改 和註釋如下 include include int strchr char s,char ch int ...

c語言程式設計錯誤問題,C語言程式設計錯誤問題

void main 是不存在的,現在標準的寫法有兩種 int main 或int main void 以前用main int i num word num 0 word 0 應該是int i,num,word,num 0,word 0 中間是逗號,不是分號,程式中,分號表示語句的結束,編譯器一看到分...

C語言字串出現亂碼,C語言 字串輸出時最後出現亂碼

第6行改為 char a 100 b 100 如果要輸出最終結果,沒必要每複製一個字元就輸出一次。將第25行刪掉。可以參考一下這個,講的很清楚 亂碼問題 codeblocks亂碼問題。它這個是codeblocks的,其他其實也差不 太多吧。關鍵是 原始檔儲存編碼 編譯器解釋原始檔的編碼 生成執行檔案...