You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言对指向数组的双指针索引访问导致崩溃如何解决

问题根因

  • 崩溃由运算符优先级使用错误导致:C语言中,下标运算符[]优先级高于解引用运算符*,你写的*arr[i]实际执行逻辑是*(arr[i]),和你预期的先解引用二级指针再访问数组下标的逻辑完全不符。
  • 你传入的arr是指向main函数中main_arr变量的二级指针,本身只对应1个合法的指针内存地址,当循环中i>=1时,arr[i]已经是访问非法栈内存,对其解引用直接触发段错误。

修复方案

修改foo函数中循环内的赋值语句,显式加括号控制运算优先级:

void foo(int **arr) {
    int num_elements = 3;
    *arr = malloc(num_elements*sizeof(int));
    // 附加最佳实践:判断malloc返回值,避免分配失败时访问空指针
    if (*arr == NULL) {
        perror("malloc申请内存失败");
        return;
    }

    for(int i=0; i<num_elements; i++){
        (*arr)[i] = i;  // 先解引用二级指针拿到数组首地址,再做下标访问
    }
}

修改后程序即可正常输出预期结果0 1 2 。


内容的提问来源于stack exchange,提问作者MANA624

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:54:03