2011-07-25 85 views
1

分配時的多層次,然後試圖訪問指針數組的指針時:賽格故障使用間接

void tester(char ***p) 
{ 
    int i; 
    char **pp; 

    pp = *p; 
    pp = calloc(10, sizeof(*pp)); 

    for (i = 0; i < 10; i++) 
     printf("%d = %p\n", i, pp[i]); 

      *p = pp; 
} 

void tester_broken(char ***p) 
{ 
    int i; 

    *p = calloc(10, sizeof(**p)); 

    for (i = 0; i < 10; i++) 
     printf("%d = %p\n", i, *p[i]); 
} 

int main(void) 
{ 
    char **a; 

    tester(&a); 
    tester_broken(&a); 

    return 0; 
} 

任何人都可以解釋爲什麼這些作品和其他賽格故障之一?

+0

嘿,這是[三星程序員](http://www.c2.com/cgi/wiki?ThreeStarProgrammer):-) – Praetorian

回答

6

這是一個優先問題。請嘗試:

void tester_fixed(char ***p) 
{ 
    int i; 

    *p = calloc(10, sizeof(**p)); 

    for (i = 0; i < 10; i++) 
     printf("%d = %p\n", i, (*p)[i]); 
} 

括號運算符(數組下標)綁定比星號運算符(取消引用)更緊密。圓括號表達你的意圖。