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

C语言动态数组实现多项式相加触发segmentation fault问题求助

段错误直接原因

1. 指针sizeof误用导致数组越界

你代码中int size1 = sizeof(add1.coeff);写法完全错误:
add1.coeff是double*类型的指针,sizeof运算获取的是指针本身的内存占用长度(64位系统下为8字节,32位系统下为4字节),并不是你动态分配的数组的元素个数5。
这会导致外层循环for(int i = 0; i < size1; i++)的循环次数变成8次而非预期的5次,当i>=5时访问add1.power[i],就会越界访问长度只有5的power固定数组,直接触发段错误。

其他关联错误
  • 内存泄漏:main函数中你提前给p3.coeff调用malloc分配了空间,后续执行p3 = add2Poly(p1,p2)时,add2Poly内部给返回值的coeff分配了新的内存空间,赋值操作会覆盖原p3.coeff的地址,导致你提前分配的内存再也无法访问和释放。
  • 业务逻辑错误:多项式相加的核心行写反了参数,p3.coeff[i] = add1.power[i] + add2.power[j]是把两个指数相加,正确写法应该是加系数p3.coeff[i] = add1.coeff[i] + add2.coeff[j];且当前逻辑只会保留两个多项式中指数相同的项,指数不同的项会被直接丢弃,不符合多项式相加规则。
  • 未初始化隐患:你只给coeff和power数组的索引1、2赋值,其余索引位置都是未初始化的随机值,遍历访问时会出现不可预期的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:24:00