C++使用vector存储运算结果时触发SIGSEGV段错误问题求助
问题定位
- 核心崩溃原因:函数未返回指定类型的值,函数签名为
vector<int> oper(int A, int B),要求返回std::vector<int>对象,但代码末尾没有添加return arrayV;语句,调用方拿到的是非法的野对象,访问时直接触发SIGSEGV。 - 语法逻辑错误:两处
else分支写法错误,else(B >A );中额外添加了条件表达式与结尾分号,会导致else逻辑为空,后续大括号内的赋值语句无论条件是否成立都会执行,最终减法、除法逻辑不符合预期。 - 潜在崩溃风险:除法逻辑未做除零判断,当较小的操作数为0时会触发除零错误,导致程序崩溃。
修复后代码
#include <vector> std::vector<int> oper(int A, int B) { std::vector<int> arrayV; // 加法 int addition = A + B; arrayV.push_back(addition); // 乘法 int multiplication = A * B; arrayV.push_back(multiplication); // 减法(取绝对值差) int subtraction = A >= B ? A - B : B - A; arrayV.push_back(subtraction); // 除法(先校验除数非0,异常情况默认返回0,可根据业务调整) int division; if (A >= B) { division = B != 0 ? A / B : 0; } else { division = A != 0 ? B / A : 0; } arrayV.push_back(division); // 返回构造完成的vector return arrayV; }
内容的提问来源于stack exchange,提问作者DunPushSoHard
相关产品推荐
相关产品推荐

