2016-04-05 2 views
-1

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?

+3

Zeigen Sie die Implementierung von 'get_command'. –

+1

Zeigen Sie Ihren Code, anstatt ihn zu beschreiben. –

+3

Debugging 101: Überprüfen Sie Ihre Annahmen (d. H. Inhalte von 'str' * nach *' get_command() 'und * vor *' fork() '). – DevSolar

Antwort

0

In get_command() Funktion definiere ich einen char * cmd [2]

Sie sollten auch einige Speicher für das Array zuteilen

char **cmd; 
cmd = malloc(2 * sizeof(char*)); 

sonst wird es nicht funktionieren .

Wenn Sie es einfach im Körper einer Funktion als char *cmd[2]; definieren, dann ist es eine lokale Variable, deren Inhalt nach der Rückgabe der Funktion undefiniert ist.

Verwandte Themen