C++ 两数求和,break导致的内存分配问题?

电子信息专业初学者,这段代码总报错,写的是leetcode上两数求和的一个问题,把return放里面就不报错了,这是为啥?

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int len=nums.size();
        vector<int> ans;
        int m=0,n=1;
        for (m=0;m-1;m++)
        {
            
            for (n=m+1;nif (target==nums[m]+nums[n])
                {
                    break;
                }
            }
            if (nums[m]+nums[n]==target)         
            {
                break;
            }
        };
        ans.push_back(m);
        ans.push_back(n);
        return ans;
    }
};

17行是有风险的,如果上面的for循环没有执行break跳出循环,那么循环结束,n的值就是len,导致17行nums[n]就会数组越界访问了。
17行的if多加一个条件,if(n<len && nums[m]+nums[n]==target)
另外22、23行应该放到for循环里吧

一般数组相关越界都是你访问数组大小的代码问题,重点考虑边界。

img