同样的C++代码编译后的exe文件,多次运行结果不同

同样的C++代码,多次运行结果不同
代码如下
#include 
#include 
using namespace std;

int maxSubSum(const vector<int> &a)
{
    int maxSum = 0;
    for(int i=0; isize(); i++)
    {
        for(int j=0; j<=i; j++)
        {
            int thisSum = 0;
            for(int k=j; k< ( j+a.size()-i+1 ); k++)
            {
                thisSum = thisSum + a[k];
            }       
            if(thisSum>maxSum)
            {
                maxSum = thisSum;
            }
        }
    }
    return maxSum;
}

int main()
{
    vector<int> arr{-2, 11, -4, 13, -5, -2};
    int maxSum = 0;
    maxSum = maxSubSum(arr);
    cout << maxSum << endl;
    return 0;
}

运行结果及报错内容

使用cmake基于GCC 8.1.0 X86_64-mingw32编译,然后多次运行所得maxSubSum.exe文件,输出结果不同,除了正确答案20外,还会出现不同的随机数乱码。

img

重新编译后,多次运行也还是上述类型的结果。请问是哪里出了问题呢?

for(int k=j; k< ( j+a.size()-i+1 ); k++) 这个循环越界了啊
如果j,i都为0,那就是k<a.size()+1了。当k为a.size(),是越界访问,所以越界获得的值有随机性,导致最后结果不确定