Also habe ich eine Funktion, die eine Char ** - Variable mit einigen String-Daten lädt. Mein Ziel ist es, den Prozess zu verzweigen und einige dieser Daten im Kind und einige vom Elternteil zu drucken. Ich kann jedoch nicht auf den Zeiger nach dem Aufruf von fork() verweisen.Verweis auf Zeiger nach einem Aufruf von fork() in C
Ich dachte, dass fork() eine Kopie des gesamten Adressraum des übergeordneten Prozesses, der, dass es die verschiedenen Stapelzeiger würde ... scheint gemacht derzeit
Im Wesentlichen mein Code wie folgt aussieht:
load_data(char **data);
char** data;
load_data(data);
printf("String 0: %s\n", data[0]);
fork();
printf("String 0 again: %s\n", data[0]); /* Segfaults Here! */
Wer hat irgendwelche Ideen, was ich falsch mache? Ich habe ein bisschen Google suchen, und es scheint, dass was ich tue, sollte funktionieren - aber es tut nicht. So ich etwas Grundsätzliches bin Missverständnis ...
* "Ich dachte, dass fork() habe eine Kopie des gesamten Adressraums des Elternprozesses erstellt, der so aussieht, als würde er die verschiedenen Stapelzeiger enthalten ... "* Dies ist nicht relevant für die Frage, aber zumindest auf den meisten modernen UNIX-Systemen," fork "doesn ' t Kopieren Sie den gesamten Adressraum zu dem Zeitpunkt, zu dem er ist namens. Es verwendet ein * Copy-on-Write * -Schema; Die Speicherseiten werden kopiert, sobald sie sich ändern. Es fühlt sich an wie die Speicherseiten, die zur Zeit von "fork" kopiert wurden. –