Ich schrieb ein kleines Programm zum Lernen fork()
, hier ist das Problem.nach fork(), warum zeigt die lokale Variable, die ein malloc char ** von einer anderen Funktion zurückgegeben hat, nichts?
int main()
{
char **str = NULL;
int pid;
str = get_command();
printf("befork fork(), str[0] = %s, str[1] = %s\n", str[0], str[1]);
if((pid = fork()) == 0)
{
printf("str[0] = %s, str[1] = %s\n", str[0], str[1]);
}
else
{
printf("str[0] = %s, str[1] = %s\n", str[0], str[1]);
}
}
char **get_command()
{
char *cmd[2];
cmd[0] = malloc(6);
memcpy(cmd[0], "hello\0", 6);
cmd[1] = malloc(6);
memcpy(cmd[1], "world\0", 6);
return cmd;
}
In get_command()
Funktion I definieren eine char *cmd[2]
und dann malloc
zwei Zeichenketten für die beiden Elemente der cmd.Before fork(), kann die Str als expected.But nach fork(),
gedruckt werden die str
in Mutter gedruckt und Kindprozess sind beide NULL. Warum?
Zeigen Sie die Implementierung von 'get_command'. –
Zeigen Sie Ihren Code, anstatt ihn zu beschreiben. –
Debugging 101: Überprüfen Sie Ihre Annahmen (d. H. Inhalte von 'str' * nach *' get_command() 'und * vor *' fork() '). – DevSolar