C++数组求和函数simpleArraySum编译失败运行异常问题求助
代码问题修复说明
核心错误点
simpleArraySum函数中循环终止条件写死为i < 11,但实际传入的数组长度由输入动态决定:你使用的测试数组仅包含6个元素,访问超出数组实际长度的下标会触发未定义行为,导致结果错误、程序崩溃或编译运行异常。- 固定写死的循环上限不具备通用性,只要传入数组长度不等于11,计算结果都会出错。
修复方案
仅需修改simpleArraySum函数的循环条件,使用vector自带的size()方法获取数组实际长度即可,修改后的函数代码如下:
int simpleArraySum(vector<int> ar) { int sum = 0; for (int i = 0; i < ar.size(); i++) { sum += ar[i]; } return sum; }
可选简化写法
如果使用C++11及以上版本,还可以用更简洁的范围for循环实现:
int simpleArraySum(vector<int> ar) { int sum = 0; for (int num : ar) { sum += num; } return sum; }
也可以引入<numeric>头文件,调用标准库的accumulate方法直接完成求和:
// 注意需要先引入头文件 #include <numeric> int simpleArraySum(vector<int> ar) { return accumulate(ar.begin(), ar.end(), 0); }
你原代码的其余部分逻辑正常,替换上述simpleArraySum实现后即可正常运行,测试用例输入1,2,3,4,10,11将正确返回求和结果31。
内容的提问来源于stack exchange,提问作者Emeka
相关产品推荐
相关产品推荐

