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

C语言函数传数组指针出现stack smashing detected报错求助

问题原因分析
  • 核心错误出在main函数中调用einmaleins时的参数传递错误:你定义的arr是长度为10的int数组,合法下标范围是0~9,你传递的&arr[10]是数组最后一个元素之后的非法地址,完全没有指向数组的有效存储区域。
  • einmaleins函数中收到这个非法地址后,循环向arr[i-1]写入数据时,相当于直接覆盖了数组后方的栈内存区域,破坏了栈的保护校验结构,因此触发了stack smashing detected的栈溢出报错。
修复方案

只需要修改main函数中调用einmaleins的参数,传递数组的首地址即可,有两种等价的写法:

  1. 直接传递数组名arr,C语言中数组名作为参数传递时会自动退化为首元素指针
  2. 显式传递首元素地址&arr[0]
修正后的完整代码
int einmaleins(int zahl, int *arr){
    int e;
    for(int i = 1; i<11; i++){
        e = zahl*i;
        arr[i-1]=e;
    }
    return 0;
}

int main(){
    int arr[10] = {0};
    // 修正参数为数组首地址
    einmaleins(2, arr);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:45:05