2016-07-12 45 views
-3

我得到了「分段錯誤(核心轉儲)」「FILE * pFile;」出現分段錯誤(核心轉儲)?

並且進程被中斷。

請幫助解決它!

可疑部分代碼在這裏

...

FILE *pFile; 
char buffer[100]; 
sprintf(buffer,"/var/www/html/%s.txt",topic); 

pFile = fopen(buffer,"w"); 

中可能會出現此問題上面 (沒有進入的if-else)

if(NULL == pFile){ 
    _mosquitto_log_printf(NULL, MOSQ_LOG_DEBUG,"open failure"); 
}else{ 
    fwrite(payload,1,sizeof(payload)-1,pFile); 
    _mosquitto_log_printf(NULL, MOSQ_LOG_INFO, "File context : %s", payload); 
} 
fclose(pFile); 

...

操作系統Ubuntu 14

+2

什麼是「有效載荷」? –

+1

您是否嘗試使用調試器來查看哪條指令導致段錯誤? – blatinox

+0

如果'topic'足夠長,您創建的文本可能不適合緩衝區。由於這看起來好像在堆棧中,緩衝區溢出可能會破壞'pFile',一些其他變量甚至是返回地址。 IOW:它可能是一個經典的緩衝區溢出(但沒有惡意的意圖)。如您所說,在輸入if-else子句之前可能會出現問題。 –

回答

3

即使它是空指針,也可以使用pFile調用fclose。使用無效指針(如空指針)調用fclose或已關閉的FILE*undefined

只有調用fclose是指針不是NULL,即在您的代碼的else子句中。

+0

太棒了!你指出我的錯誤,問題解決了,謝謝。 – JimmyHo