You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:C++非void函数未在所有控制路径返回值编译错误

问题排查与修复

错误原因分析

你的代码存在两个核心问题,直接导致编译错误和潜在运行时异常:

  1. 返回路径不完整:第二个for循环仅在输入数组非空(n>0)时才会执行return temp;,如果数组为空(n=0),该循环不会进入,函数就没有返回值,触发了non-void function does not return a value in all control paths错误。而且这个循环本身完全多余——无需遍历数组再返回,直接返回构造好的temp即可。
  2. 容器越界访问: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:05:03