2012-04-12 54 views
1

這是一個C編程問題。如何在函數外部傳遞2維指針,以便可以訪問指針指向的內存?

我需要在函數f()之外傳遞一個2-d指針,以便其他函數可以訪問分配給f()的內存。

,但我得到了段錯誤的「錯誤在這裏」當我> 1.

怎麼辦2-d指針,以便輸入參數可以真的外功能中使用?我懷疑*ba = (dp[0]);有什麼問題。

爲什麼?

typedef struct { 
    char* al; /* '\0'-terminated C string */ 
    int sid; 
} strtyp ; 

strtyp *Getali(void) 
{ 
    strtyp *p = (strtyp *) malloc(sizeof(strtyp)) ; 
    p->al = "test al"; 
    p->sid = rand(); 
    return p; 
} 

strtyp *GetNAl(void) 
{ 
    strtyp *p = (strtyp *) malloc(sizeof(strtyp)) ; 
    p->al = "test a"; 
    p->sid = rand(); 
    return p; 
} 

int *getIDs2(strtyp **ba, int *aS , int *iSz) 
{ 
    int *id = (int *) malloc(sizeof(int) * 8) ; 
    *idS = 8 ; 
    int length = 10; 
    int i ; 
    strtyp **dp = (strtyp **) malloc(sizeof(strtyp*)*length) ; 
    for(i = 0 ; i < length ; ++i) 
    { 
     dp[i] = GetNAl(); 
     printf("(*pd)->ali is %s ", (*pd[i]).ali); 
     printf("(*pd)->sid is %d ", (*pd[i]).sid); 
     printf("\n"); 
    } 
    *ba = (dp[0]); 
    for(i = 0 ; i < length ; ++i) 
    { 
     printf("(*ba)->ali is %s ", (*ba[i]).ali); // error here 
     printf("(*ba)->sid is %d ", (*ba[i]).sid); 
     printf("\n"); 
    } 

    *aIs = length ; 
    return id; 
} 
+0

凡DP聲明? – 2012-04-12 04:47:44

+0

對不起,錯字,謝謝 – user1002288 2012-04-12 04:50:43

回答

4

如果你想設置在調用函數strtyp **變量,參數必須是指向這個類型 - strtype ***。所以,你的功能將類似於:

int *getIDs2(strtyp ***ba, int *aS, int *iSz) 
{ 
    /* ... */ 
    strtyp **pd = malloc(sizeof pd[0] * length) ; 

    for(i = 0 ; i < length ; ++i) 
    { 
     pd[i] = GetNAl(); 
     printf("(*pd)->ali is %s ", pd[i]->ali); 
     printf("(*pd)->sid is %d ", pd[i]->sid); 
     printf("\n"); 
    } 

    *ba = pd; 

    for(i = 0 ; i < length ; ++i) 
    { 
     printf("(*ba)->ali is %s ", (*ba)[i]->ali); 
     printf("(*ba)->sid is %d ", (*ba)[i]->sid); 
     printf("\n"); 
    } 

    /* ... */ 
} 

...和你的來電顯示就會是這樣的:

strtyp **x; 

getIDs2(&x, ...);