C指针异常,请解释一下

时间:2013-03-25 18:49:56

标签: c arrays pointers gcc malloc

我有一个函数,函数的基本思想是改变a指向的内容。第一个版本可行,但第二个版本没有。

有人可以帮我理解这里发生了什么吗?

// this works
void swap(int **a) {
    int *temp = malloc(sizeof(int) * 3);
    temp[0] = 0;
    temp[1] = 1;
    temp[2] = 2;
    *a = temp;
}

// this does not
void swap(int **a) {
    *a = malloc(sizeof(int) * 3);
    *a[0] = 0;
    *a[1] = 1; // seg fault occurs on this line
    *a[2] = 2;
}

我正在调用这样的函数

int main() {
   int b[] = {0,1};
   int *a = b;

   swap(&a);

   return 0;
}

此外,两个函数不同时属于同一个文件。

1 个答案:

答案 0 :(得分:14)

[]的优先级高于*(实际上,[]在C中的优先级最高。)这意味着您的表达式为*(a[0]),而不是您想要的(*a)[0]