看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) 如果用了fopen函式開啟檔案,一般來說在檔案寫入或讀取結束後都應該用fclose關閉檔 案,但是最近在看一些範例程式的時候,發現在開啟多個檔案時,如果有任何一個沒有成 功開啟,都是直接return,這樣的作法是否會產生任何可能的錯誤? 舉例來說: int main() { FILE *file1 = fopen(argv[1], "r"); if(!file1) return 1; FILE *file2 = fopen(argv[2], "rb"); if(!file2) return 2; FILE *file3 = fopen(argv[3], "w"); if(!file3) return 3; FILE *file4 = fopen(argv[4], "wb"); if(!file4) return 4; ... fclose(file1); fclose(file2); fclose(file3); fclose(file4); } 如果在開啟*file3的階段失敗,程式直接脫離main,但是並未將*file1及*file2關閉。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.67.181.135
james732:main結束的時候會把所有已經開啟的檔案關閉 11/03 11:55
littleshan:如果這邊不是 main 而只是普通 function 的話就炸囉 11/03 11:56
littleshan:改用 C++ 的 ifstream,在離開 function 時會呼叫 dtor 11/03 11:58
littleshan:並確保檔案會關閉,這是比較好的解決方式 11/03 11:58
loveflames:就算在function裡沒關閉,在exit()裡也會關阿 11/03 15:37
littleshan:這和memory leak是同樣的意思啊,程式結束記憶體會回收 11/03 16:21
littleshan:並不表示 malloc 完我們都不用 free... 11/03 16:21
stupid0319:用malloc後free掉的記憶體還是可讀可寫吧??? 11/03 16:39
littleshan:我還是第一次聽說free後記憶體還能隨便給你讀寫的... 11/03 17:06
loveme00835:丟到 codepad 就錯給你看了呀 XD 11/03 17:09
james732:是可讀可寫沒錯 不過發生什麼事沒人能保證 XDDDDD 11/03 17:22
loveflames:執行free後,那個區塊如果還在的話就行 11/03 17:32
stupid0319:也可以用malloc來動態產生程式碼來執行吧 11/03 17:47
akasan:理論上可以但請考慮到 OS 對 Memory 有沒有保護機制 11/03 18:08