C++实现findTwoSumPair函数报signal aborted错误如何解决
错误原因定位
- 内层循环条件写错:内层for循环的终止条件误写为
i < vec.size(),外层循环中i不变的前提下该条件永远成立,导致j无限递增,程序进入死循环,因此仅输出Q3后无后续输出 - 下标初始值错误:内层循环j的初始值设为
i,会出现两个元素取同一个下标的情况,不符合「不同元素」的要求 - 变量作用域错误:i、j都是循环内部定义的局部变量,循环结束后无法访问,return语句直接访问会触发非法内存访问,导致core dump
- 返回值逻辑错误:要求返回下标组成的pair,现有代码写的
vec[i],vec[j]返回的是元素值,且不存在匹配对时没有返回{-1,-1}的逻辑,语法上还缺失pair构造的右括号、函数结束的右大括号 - 空输入兼容缺失:没有判断vector为空、长度不足2的边界场景,空输入下直接进入循环会触发未定义行为
正确实现代码
std::pair<int, int> findTwoSumPair(const std::vector<int>& vec, int targetSum) { // 兼容空输入、长度不足2的边界场景 if (vec.size() < 2) { return {-1, -1}; } int len = vec.size(); for (int i = 0; i < len; ++i) { // j从i+1开始,保证两个下标不同,返回结果天然为升序 for (int j = i + 1; j < len; ++j) { if (vec[i] + vec[j] == targetSum) { return {i, j}; } } } // 未找到匹配对返回默认值 return {-1, -1}; }
该实现暴力遍历所有不同下标组合,完全匹配题目要求,测试用例中第一个目标和6会匹配到下标1(元素2)和下标3(元素4)返回{1,3},第二个目标和10无匹配返回{-1,-1},和预期输出一致。
内容的提问来源于stack exchange,提问作者Funmi Orekoya
相关产品推荐
相关产品推荐

