2016-04-05 14 views
-1

fork()'u öğrenmek için küçük bir program yazdım, sorun şu., neden başka bir işlevden dönen bir malloc char ** saklanan yerel değişken hiçbir şey sunmuyor?

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; 
} 

get_command() işlevi, tanımlamam bir char *cmd[2] ve cmd.Before çatalın iki element() için malloc iki ipler, str str ana basılmıştır fork(), sonra expected.But olarak basılabilir ve Çocuk süreci hem NULL. Niye ya? get_command() işlevi

+3

"get_command" uygulamasının uygulamasını göster. –

+1

Açıklamak yerine kodunuzu gösterin. –

+3

Debuggung 101: Varsayımlarınızı kontrol edin (diğer bir deyişle, '' str' * 'nin ardından '' get_command() 've *' 'fork()' 'dan). – DevSolar

cevap

0

, I

için de bir dizi için bir depolama alanı tahsis [2] cmd aksi

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

çalışmaz char * tanımlar .

Yalnızca bir işlev gövdesinde char *cmd[2]; olarak tanımlarsanız, bu bir yerel değişkendir ve işlev döndükten sonra içeriği tanımlanmaz.

İlgili konular