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

C语言运行Lapenta_Markidis函数报stack smashing detected错误求排查

错误诱因分析

stack smashing detected错误本质是栈上数组发生了越界写操作,破坏了栈的保护检测数据,你的代码里存在多处明确的数组下标越界问题,以及次要的逻辑语法错误:

核心越界问题(直接触发栈粉碎)

C语言中长度为3的数组合法下标范围是0~2,你代码中所有声明为[3]的数组,都出现了访问下标为3的错误,且存在下标漏写问题:

  • 雅可比矩阵计算段所有访问B[3]、upartk[3]、upart[3]的语句全部越界,包括J11到J33的所有计算行。
  • dupartk赋值段仅对下标1、2、3赋值,不仅dupartk[3]越界,还完全遗漏了dupartk[0]的赋值,导致后续循环更新upartk时读取未初始化值,同时越界写入栈空间。

次要逻辑/语法错误

  • 计算C2的行C2[i] = -( upartk[i] / (gL_new*c2) )/ ((gL_new + gL),2) ;中误用了逗号表达式,实际除数会被计算为常量2,而非你预期的(gL_new + gL)的平方,正确写法应该是/ pow(gL_new + gL, 2)。
  • 雅可比行列式Det没有做0值判断,存在除以零的崩溃风险。
修复方案
  • 将代码中所有数组访问的下标从1/2/3对应修改为0/1/2,补全dupartk[0]的赋值语句。
  • 修正C2计算行的语法错误。
  • 可选添加Det为0的异常分支处理,避免除零错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:54:03