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
相关产品推荐
相关产品推荐

