2 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個(gè)贊
(gdb) p fp
$21 = (FILE *) 0x603fd0
首先.p fp打印的是文件指針.也就是fp的指針地址.而是文件指針的內(nèi)容...
你應(yīng)該使用 p *fp查看_fileno
如果不為-1.則文件是被打開的.
其實(shí)在fp前做個(gè)檢查就好了 ...
if(fp) fclose(fp);
還有一種辦法.如果你是LINUX的話.
在調(diào)試的時(shí)候.在fclose之前打上斷點(diǎn).運(yùn)行到斷點(diǎn)的時(shí)候ps看下程序的PID.去proc里看下文件是否已經(jīng)被關(guān)閉了...
具體路徑在/proc/PID/fd
ls -l一下.就可以看到打開了哪些文件.以及文件描述符.如果沒有fopen打開的文件.就表示已經(jīng)被關(guān)閉過了...

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊
SIGSEGV 信號表示你引用了一個(gè)無效的,或者非法的內(nèi)存區(qū)域;
出現(xiàn)這個(gè)錯(cuò)誤,肯定是你的 fp 指針無效,但不一定非法,所以 fclose 報(bào)錯(cuò);
你要保證你的文件打開成功,并且 fp 持有一個(gè)合法的文件指針,才能用 fclose 關(guān)閉文件;
- 2 回答
- 0 關(guān)注
- 124 瀏覽
添加回答
舉報(bào)