求助:C++非void函数未在所有控制路径返回值编译错误
问题排查与修复
错误原因分析
你的代码存在两个核心问题,直接导致编译错误和潜在运行时异常:
- 返回路径不完整:第二个
for循环仅在输入数组非空(n>0)时才会执行return temp;,如果数组为空(n=0),该循环不会进入,函数就没有返回值,触发了non-void function does not return a value in all control paths错误。而且这个循环本身完全多余——无需遍历数组再返回,直接返回构造好的temp即可。 - 容器越界访问:
vector<int> temp;默认构造的是空容器,未分配内存,直接使用temp[pos] = nums[i]会触发未定义行为,程序大概率崩溃。
修复后的代码
class Solution { public: vector<int> rearrangeArray(vector<int>& nums) { int n = nums.size(); vector<int> temp(n); // 提前分配n个元素的内存,避免越界 int pos=0, neg=1; for(int i=0; i<n; i++) { if(nums[i]>=0) { temp[pos] = nums[i]; pos+=2; } else { temp[neg] = nums[i]; neg += 2; } } return temp; // 直接返回构造完成的数组 } };
关键修复点说明
- 预分配容器空间:将
vector<int> temp;改为vector<int> temp(n);,确保容器有足够的空间存储n个元素,彻底避免下标越界问题。 - 修正返回逻辑:移除多余的第二个
for循环,在第一个循环结束后直接返回temp,保证函数在所有控制路径下都有返回值,解决编译错误。
内容的提问来源于stack exchange,提问作者Isha Aggarwal
相关产品推荐
相关产品推荐

