C指针异常,请解释

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

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

最佳答案

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

关于C指针异常,请解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15622460/

相关文章:

c - 数据在 C union 中的位置是否有任何标准?

java - Sprite ,将位图存储在数组中

java - 查找数组中行的绝对值,然后打印答案中的最大值

c++ - 将 char * 转换为 vector C++

c++ - 这是初始化指针的正确方法吗?

c - 无符号字符循环

c - stat() 是一个昂贵的系统调用吗?

我可以将 jpeg 或 mjpeg 文件从硬盘传输到 GPU 内存吗?

javascript - 如何将名称中带有数组索引的对象属性合并到一个数组中?

c - 使用 struct ip 和 struct iphdr 取消引用指向不完整类型的指针