2011-07-25 59 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]); 
} 

括号运算符(数组下标)绑定比星号运算符(取消引用)更紧密。圆括号表达你的意图。