Segmentation Fault bei fopen Call
-
Abend
Ich arbeite an einem kleinen C Projekt mit der ncurses Libary, und bin nun
auf ein Problem gestoßen das ich einfach nicht loesen kann.
Mein Problem ist das mein Programm bei einem fopen Aufruf mit einem Segmenation Fault, Signal SIGSEGV abstuerzt. Ich bin mir ziemlich sicher das es am fopen liegen muss, da es das gleiche Problem bei einem fopen in einem anderen Teil des programms gabs, dort hab ich das fopen dann aber einfach ausdokumentiert, und nun
jammert er beim nächsten.Woran kann das liegen? Die Parameter von fopen passen auch. Ich habs schon mit
Konstanten probiert (fopen("Text","w")) liegt also nicht an einem nullpointer.
-
Möglich wäre, dass du irgendwo, wo du nicht sollst, im Speicher rumschreibst. Das hat dann unter Umständen solche merkwürdigen Effekte. Um auf Nummer sicher zu gehen: Geht den die Funktion fopen an sich, also in einem Minimalprogramm wie diesem:
#include <stdio.h> int main(void) { FILE *fp = fopen("test.dat", "rb"); if(fp) fclose fp; return 0; }
-
Teste das programm mal mit valgrind.
-
Danke fuer die Antworten, Naja ich weiss das solchen "abnormalen" Fehler normalerweise von Speicherfehler kommen, doch ich hab mir noch mal das gesammte
Programm Zeile fuer Zeile durchgeschaut, hab ausdokumentiert was geht, habs auf das niedrigste runter gedrueckt. Und jetzt bin ich mir verdammt sicher das diese
seltsamen Fehler irgenwas mit der localtime() Funktion zu tun haben. Dokumentiere ich die aus, dann passt alles und ich kann riesen Datein Fehlerfrei laden. Hab ich die drinn, dann spinnt er fast sofort.Die bestimmte Code stelle schaut wie folgt aus.
pt_t1=localtime(>_timer); if(!pt_t1) { printw("Couldnt get the local time. Will use the Last value!\n"); getch(); } else { gpst_tblock=pt_t1; } gc_temp[0]=0;//clear temp for(i_t1=0;i_t1<gi_funktionsebene;i_t1++) sprintf(&gc_temp[strlen(gc_temp)]," "); sprintf(gc_temp,"\n[%c](%d)(%s) T[%d.%d.%d %02d:%02d:%02d] EB:%d in %s:\"%s\"" ,gc_level[c_msglevel] \ ,gi_aktivline \ ,gc_aktivfile \ ,gpst_tblock->tm_mday \ ,gpst_tblock->tm_mon \ ,gpst_tblock->tm_year+1900 \ ,gpst_tblock->tm_hour \ ,gpst_tblock->tm_min \ ,gpst_tblock->tm_sec \ ,gi_funktionsebene \ ,gc_funktionsstack[gi_funktionsebene] \ ,gc_temp2);
Kann es was damit zutun haben das ich die Funktion zu oft aufrufe? Weil sie bei jeder Meldung aufgeruft wird, und dass koennen hunderte in der Sekunde sein.
Ich bitte WIRKLICH um Hilfe.
-
Kann es was damit zutun haben das ich die Funktion zu oft aufrufe? Weil sie bei jeder Meldung aufgeruft wird, und dass koennen hunderte in der Sekunde sein.
Das ist _sehr_ unwahrscheinlich. Die Auswirkungen von Speicherfehlern, merkt man oft erst an ganz anderer Stelle.
Ich bitte WIRKLICH um Hilfe.
Im Usenet gilt Großschreibung schon fast nicht mehr als Bitte.. Eine Möglichkeit zur genauen Fehlersuche wurde hier schon genannt: Benutze, wie empfohlen einen MemoryDebugger (zB valgrind)..
mfg Unixer