繁体   English   中英

C 索引到数组的双指针会导致崩溃

[英]C Indexing into double pointer to array causes crash

我有以下简化代码来为另一个函数的数组分配空间和赋值,该函数通过指向数组的指针传入。 索引到解除引用的指针时会导致崩溃:

void foo(int **arr) {
    int num_elements = 3;
    *arr = malloc(num_elements*sizeof(int));

    for(int i=0; i<num_elements; i++){
        *arr[i] = i;  // crashes here
    }
}

int main(){
    int *main_arr = NULL;

    foo(&main_arr);

    // Doesn't get here
    for(int i=0; i<3; i++)
        printf("%d ", main_arr[i]);

    printf("\n");
    return 0;
}

我期待输出0 1 2 ,但我看到的是Segmentation fault (core dumped) 我正在做的事情的逻辑似乎很合理,所以我不知道该怎么办。

结果证明这个问题是模棱两可的:虽然代码的逻辑是合理的,但在崩溃的那一行我解释为“取消引用,然后访问第 i 个元素”,但编译器显然解释为“访问第 i 个元素” ,然后取消引用”。 事实上,使用括号明确说明我的意图解决了这个问题:更改为

    for(int i=0; i<num_elements; i++)
        (*arr)[i] = i

产生所需的0 1 2输出。 事实证明,语法很重要!

编辑:正如@JonathanLeffler 指出的那样,“模棱两可”是一个糟糕的词选择,因为它定义的行为 * 的优先级低于 []

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM