merkwürdige fehler bei vergleich / grösser
-
hab mal eine ZIP mit den dateien die das problem (oder ein identisches) verursachen hochgeladen.
wäre super wenn sich das jemand anschauen könnte um mir bei dem problem zu helfen.
compilen tu ich mit der aktuellen version von MinGW. zum compilen kann man einfach die datei "compile" im ZIP benutzen (in msys)...hier ist die datei:
http://da41d.port5.com/prob2.zip
-
while(c != EOF) {
c = fgetc(infile);
c = dec_byte(c); // hier wird das byte decoded... wenn man das auskommentiert funktioniert es problemlos...Ist ja schön, dass du auf EOF prüfst, aber das solltest du nach fgets machen, nicht davor. Sonst decodierst du die eof-markierung (-1). Dabei kommt 255 raus, und das schreibst du dann immer wieder in scriptlines[currentline]. Die Schleife bricht nie ab, weil 255 ja nicht -1 ist. Das geht so lange, bis du so weit über den reservierten Speicher hinaus geschrieben hast, dass das Programm abstürzt.
-
@loki
Noch ein kleiner Tipp: Initialisiere deine Variablen, bevor du sie benutzt!
-
@MFK: vielen dank, ich glaube das ist wirklich das problem!
werde das später ausprobieren@AJ: stimmt, aber wo siehst du eine uninitialisierte variable
habe keine gefundenaber trotzdem danke!
-
loki@school schrieb:
@AJ: stimmt, aber wo siehst du eine uninitialisierte variable
habe keine gefundenint c;
-
stimmt. wusste nicht das das sein muss...
heisst das es sollte gehen wenn ich statt "int c;" "int c = 0;" schreibe?hmm, hab das grade ausprobiert, und es zeigt auch keinen anderen effekt.
@MFK: hab deine theorie nochmal durchgedacht, und ich denke daran kann es nicht liegen... denn dann dürfte es nur am ende des files abstürzen, aber so wie es aussieht stürzt es entweder nach dem ersten char ab, oder nach dem ersten binären '\n'....
-
loki@school schrieb:
@AJ: stimmt, aber wo siehst du eine uninitialisierte variable
habe keine gefundenDeine globale Variable current_enc_asc_digit ist nicht initialisiert in deinem Code, bevor du sie benutzt, d. h. es steht da irgendeine Zahl drin, die du abprüfst in deiner Funktion enc_line().
-
jo, stimmt. liegt daran das ich die gepostete version schlecht zusammengeschnitten hab. aber da war der fehler auch nicht direkt reproduzierbar. deshalb habe ich die ZIP hochgeladen (siehe 4 posts höher), darin ist das problem direkt reproduzierbar...
-
AJ schrieb:
Deine globale Variable current_enc_asc_digit ist nicht initialisiert in deinem Code, bevor du sie benutzt, d. h. es steht da irgendeine Zahl drin, die du abprüfst in deiner Funktion enc_line().
Globale Variablen werden automatisch mit 0 initialisiert, genau wie bei static.
-
loki1985 schrieb:
@MFK: hab deine theorie nochmal durchgedacht, und ich denke daran kann es nicht liegen...
Das ist keine Theorie. Ich habe das mit dem Debugger getestet. Probieren geht über Studieren, wie man so schön sagt.
denn dann dürfte es nur am ende des files abstürzen, aber so wie es aussieht stürzt es entweder nach dem ersten char ab, oder nach dem ersten binären '\n'....
Wie es aussieht? Woraus ziehst du deine Schlüsse? Mein Debugger sagt, dein Programm stürzt am Ende der Datei ab, weil du zum falschen Zeitpunkt auf EOF testest.
-
Daniel E. schrieb:
AJ schrieb:
Deine globale Variable current_enc_asc_digit ist nicht initialisiert in deinem Code, bevor du sie benutzt, d. h. es steht da irgendeine Zahl drin, die du abprüfst in deiner Funktion enc_line().
Globale Variablen werden automatisch mit 0 initialisiert, genau wie bei static.
Stimmt, hab ich ganz verdrängt :(.
-
Wie es aussieht? Woraus ziehst du deine Schlüsse? Mein Debugger sagt, dein Programm stürzt am Ende der Datei ab, weil du zum falschen Zeitpunkt auf EOF testest.
ich habe eine funktion, die mir einige infos in ein logfile schreibt. und in dem logfile kommt es nie über die erste zeile des eingelesenen textfiles hinaus, auch wenn das textfile z.b. 20 zeilen lang ist.... habe testweise mal ein "if (c == EOF) {return 1;}" gleich nach dem fgetc(c); eingebaut, hat aber auch keinen unterschied gemacht...
-
....
zudem stürzt es ja nur ab, wenn man nach dem fgetc das "c = dec_byte(c);" hat.... wenn man das auskommentiert funktioniert es perfekt...
-
loki@school schrieb:
....
zudem stürzt es ja nur ab, wenn man nach dem fgetc das "c = dec_byte(c);" hat.... wenn man das auskommentiert funktioniert es perfekt...
Dann zeig uns doch mal den Code von dec_byte()
-
ich hab mir nur die problemstellung und die ersten paar beiträge angesehen also hoffe ich das das was ich jetzt schreibe nicht schon probiert wurde:
// header file #ifndef _HEADER #define _HEADER // irgendwas #endif #ifdef _GLOBAL extern int g_variable; #else #define _GLOBAL int g_variable; #endif
-
@AJ:
alles hier drin. das alte example ist obsolete, da es das problem nicht direkt reproduziert...loki1985 schrieb:
hier ist die datei:
http://da41d.port5.com/prob2.zip
-
nochmal ein *push*...
wäre echt nett wenn sich einer mal das problem in der datei anschauen könnte, ich bin langsam am verzweifeln...
und wie gesagt, der text-gepostete source reproduziert nicht korrekt, bitte ignorieren !!!
-
*scriptlines[] = {};
Ich kenne mich nicht wirklich gut mit dem aktuellen C-Standard aus, aber es würde mich wundern, wenn dieses Array mehr als ein Element hätte. Du verwendest aber fröhlich höhere Indices.
Wenn ich da z.B. 200 reinschreibe und die EOF-Prüfung korrigiere, läuft es durch.
-
MFK schrieb:
*scriptlines[] = {};
Ich kenne mich nicht wirklich gut mit dem aktuellen C-Standard aus, aber es würde mich wundern, wenn dieses Array mehr als ein Element hätte. Du verwendest aber fröhlich höhere Indices.
Wenn ich da z.B. 200 reinschreibe und die EOF-Prüfung korrigiere, läuft es durch.
danke. scheint genau das problem gewesen zu sein...
dachte immer das es variabel angepasst wird, wenn man das feld frei lässt. naja, mein fehlerwerde noch ein wenig rumtesten, aber jetzt schon vielen dank für die hilfe