使用多级间接时出现段错误

时间:2011-07-25 20:37:58

标签: c pointers indirection

分配然后尝试访问指针指针数组时:

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

任何人都可以解释为什么其中一个工作和其他seg故障?

1 个答案:

答案 0 :(得分: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]);
}

括号运算符(数组下标)比星号运算符(取消引用)绑定得更紧密。括号使你的意图明确。