2016-07-12 10 views
-3

Ich bekam "Segmentierungsfehler (Core Dumped)"Segmentierungsfehler (Core Dumped) mit "FILE * pFile;"?

und Prozess wurde unterbrochen.

Hilfe, um es bitte zu beheben!

verdächtige Teil Code hier

...

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

pFile = fopen(buffer,"w"); 

Dieses Problem wurde in der oben kommen kann (Haben Sie nicht eingeben 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); 

...

OS Ubuntu 14

+2

Was ist 'Nutzlast'? –

+1

Haben Sie versucht, einen Debugger zu verwenden, um zu sehen, welcher Befehl den Segfault verursacht hat? – blatinox

+0

Wenn "topic" lang genug ist, passt der von Ihnen erstellte Text möglicherweise nicht in den Puffer. Da dies aussieht, als wäre es auf dem Stack, würde ein Pufferüberlauf wahrscheinlich 'pFile', einige andere Variablen und vielleicht sogar die Rücksprungadresse verfälschen. IOW: Es könnte ein klassischer Pufferüberlauf sein (aber ohne böswillige Absicht). Wie Sie bereits sagten, könnte das Problem auftreten, bevor Sie die if-else-Klausel eingeben. –

Antwort

3

Sie rufen fclose mit pFile auf, auch wenn es ein Nullzeiger ist. Der Aufruf von fclose mit einem ungültigen Zeiger (wie einem Nullzeiger) oder einem FILE*, der bereits geschlossen wurde, ist undefined.

Nur Anruf fclose ist der Zeiger ist nicht NULL, d. H. In der else Klausel Ihres Codes.

+0

Awesome! Du zeigst meinen Fehler, Problem gelöst, danke. – JimmyHo

Verwandte Themen