乙個不當使用fclose引發的異常

2021-08-16 20:33:56 字數 499 閱讀 5991

最近伺服器上乙個後台傳輸檔案的服務,經常會報出異常來,只能強行終止並重啟。

昨天剛好有空,現場抓了一下dump,再把程式扔到ida裡看了一下,很快就找出原因了,原來是呼叫fclose時出錯的。

使用c的runtime函式進行檔案操作,也就是fopen,fread,ftell,fclose這些,本身這並沒有什麼問題

但是出現異常的位置往上一點,程式寫了日誌,主要內容是「開啟檔案失敗,錯誤原因:******」

也就是說,在使用fopen開啟檔案失敗了之後,程式仍然使用了fclose來關閉這個無效的file指標,導致了異常的發生。

可以簡單用下面的**測試一下:

void testfun()

else

fclose(fp);//這裡將引發異常

}

事實上,我所知道的,用closehandle關閉乙個無效的控制代碼同樣是會引發異常的。

本來開啟操作就是失敗的,file指標也無效,再關它有什麼意義呢?

fclose函式的乙個注意點

fclose是乙個函式名,功能是關閉乙個流。注意 使用fclose 函式就可以把 緩衝區內最後剩餘的資料輸出到核心緩衝區,並釋放 檔案指標和有關的緩衝區。函式原型 int fclose file fp 返回值 如果流成功關閉,fclose 返回 0,否則返回eof 1 如果流為null,而且程式可以...

乙個memset引發的血案

前幾天做了一道bst題,提交了幾次都是wa,今天抽空拿了出來仔細瞧瞧總算被我發現禍頭根源.總結原因還在於自己對memset不太了解,以前用對估計也是瞎貓撞見死耗子 memset的介紹 void memset void buffer,int ch,size t count buffer 指向某段記憶體...

乙個分號引發的「血案」

再多的表情也無法詮釋我現在的心情!a b for matrices 這是很水的一道題,然而卻整整折騰了我2個多小時。從晚上6點多開始,花了沒幾分鐘就把 敲好了,可是資料一測,竟然不對,然後就開始找問題,找了很久,我竟然都還沒看出問題在哪,越找心裡越不爽,這麼做明明對的呀,一執行怎麼就錯了呢?一直到了...