Ich kopierte etwas Code, der einfach liest eine Datei in eine Zeichenfolge und druckt die Zeichenfolge aus einem älteren Programm. Es hat gut funktioniert, also habe ich beschlossen, es etwas zu ändern. Das neue Programm istZuordnung zu Variable gibt Segmentierung Fehler in völlig unabhängig Funktion
#include <stdio.h>
#include <string.h>
int main() {
FILE *itemlist = fopen("itemlist", "r");
char *currentstring, charbuffer[2];
// char itemstart = 0;
while (fgets(charbuffer, 2, itemlist)) {
strcat(currentstring, charbuffer);
}
printf("%s", currentstring);
return 0;
}
Und es funktioniert wie erwartet. Aber wenn ich die itemstart
Zeile auskommentiere, gibt es einen Segmentierungsfehler. Ich benutze es nicht einmal und für mich ist es nicht illegal, einen Char auf 0 zu initialisieren. Ich dachte, es wäre ein Problem mit Typen, dann änderte ich es in einen kurzen und dann in int und es gab immer noch einen segfault.
Aber dann habe ich den = 0
Teil entfernt und es hat wieder funktioniert. Dann entschied ich mich, es zurückzusetzen, die Binärdatei mit gdb zu debuggen, und der segfault war bei strcat
.
Wie ist das möglich?
Worauf deutet "Stringstring" hin? – geekosaur
Nichts im Moment, es ist nur eine leere Saite. Wenn ich "Stringstring" auf NULL setze, segmentiert es. – user1002327
Das war rhetorisch. Du hast recht, es zeigt auf * nichts *. Zufallsspeicher Was denkst du passiert, wenn du zufälligen Speicher modifizierst? Wo glaubst du, dass es darauf hindeuten würde, dass du nur zufällig darauf schreiben könntest? – geekosaur