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

矩阵求逆代码运行触发Segmentation Fault错误排查

矩阵求逆段错误问题修复

错误根因

你代码里的第一个for循环增量写反了,将p++错写为n++:

// 错误写法
for(int p=0; p<n; n++)

该错误会触发两个问题:

  • 循环变量p永远为0,p < n的终止条件永远不会触发,程序进入死循环
  • n的值会不断累加变大,远超过你最初申请的矩阵尺寸,访问mat[p][x]、I[p][x]时会超出合法内存边界,直接触发Segmentation Fault。

其他需要注意的问题

  • 你当前的代码最后释放了单位矩阵I的内存,但函数声明的返回值是double**,如果你需要将逆矩阵返回给调用方使用,不要在函数内执行free操作,应该把内存释放逻辑移到调用方用完逆矩阵之后。
  • 没有对主元mat[p][p]做非0校验,如果传入的是奇异矩阵(不可逆矩阵),会出现除以0的报错。
  • 代码直接修改了传入的原矩阵mat的内容,如果业务侧不允许修改原矩阵,需要先拷贝一份原矩阵再执行消元操作。

修复后的核心代码段

仅需要修改第一个for循环的增量即可解决段错误:

// 修复后写法
for(int p=0; p<n; p++){
    f = mat[p][p];
    for(int x=0; x<n; x++){
        mat[p][x] = mat[p][x] / f;
        I[p][x] = I[p][x] / f;
    } 
    for(int i=p+1; i<n; i++){
        f = mat[i][p];
        for(int x=0; x<n; x++){
            sub = mat[p][x] * f;
            mat[i][x] = mat[i][x] - sub;
            
            sub = I[p][x] * f;
            I[i][x] = I[i][x] - sub;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:15:09