Segmentation foult nur beim Debuggen ???
-
@DirkB sagte in Segmentation foult nur beim Debuggen ???:
@WienMax sagte in Segmentation foult nur beim Debuggen ???:
Beim debuggen schlägt er aber in Zeile 65 an:
while (buftext[ibuf] != ' ')Welchen Wert hat denn ibuf an der Stelle?
Und ist der kleiner als size?Das wäre komisch. Bist du ganz sicher?
-
@hustbaer oben ist ein link zum Screenshot.
-
OK. Also entweder stimmen die Werte die VS Code da anzeigt nicht, oder du hast dir den Stack zerschossen. Ich meine, guck mal was da für
text
undbuftext
angezeigt wird.
-
@Th69 sagte in Segmentation foult nur beim Debuggen ???:
PS: malloc(size+1 * sizeof(char)) kannst du zu malloc(size+1)verkürzen (da sizeof(char) immer 1 ist).
Wenn das für einen Typ gemacht wird, bei dem sizeof() > 1 ergibt, kommt auch Müll raus, da Punkt vor Strichrechnung gilt.
-
@WienMax sagte in Segmentation foult nur beim Debuggen ???:
FILE *file; ... printf("Konnte Datei %s nicht öffnen", file); // Gehört noch ausgebessert da file bei Fehler null ist!
Der Formatspecifier %s ist nicht für eine FILE-Struktur da.
Schalte den Warnlevel vom Compiler auf Maximum und beseitige dann alle Warnungen. Ein cast ist dabei nicht das Mittel der Wahl.
@WienMax sagte in Segmentation foult nur beim Debuggen ???:
while (buftext[ibuf] != '>') nodenameende[i++] = buftext[ibuf++]; // Nodename Ende
Bei solchen Aktionen sollte das i auch mal überprüft werden, damit es nicht zu groß wird- und wenn es zu groß wird muss es auch behandelt werden.
-
@Th69 sagte in Segmentation foult nur beim Debuggen ???:
int len = fread(buftext,size,1,file);
Damit habe ich dann in len den Wert 0 was aber nicht gewollt ist.
fread returns the number of full items actually read, which may be less than count
-
OK, sollte dann
int len = fread(buftext,1,size,file); // size und 1 vertauscht buftext[len] = '\0';
sein.
PS: Statt der
1
könnte man auchsizeof(char)
schreiben.
-
@Th69 sagte in Segmentation foult nur beim Debuggen ???:
OK, sollte dann
int len = fread(buftext,1,size,file); // size und 1 vertauscht buftext[len] = '\0';
sein.
PS: Statt der
1
könnte man auchsizeof(char)
schreiben.Danke jetzt läuft das Programm so wie es soll und nicht über das Ende hinaus.
Tatsächlich ist ein Unterschied bei size: 24794 und len: 24417
-
Dies wird an den Zeilenumbrüchen liegen. Im Textmodus (unter Windows) wird
\r\n
als\n
gelesen (und damit istlen < size
).
Wenn du die Originalzeilenumbrüche erhalten willst, dann lese binär:"rb"
(hier aber nicht zu empfehlen)
-
@Th69 ja liegt eindeutig an den Zeilenumbrüchen.