c ++错误:调试断言失败

时间:2013-11-20 16:55:55

标签: c++ visual-studio-2010 debugging vector runtime-error

我正在尝试在visual studio 2010 Pro上运行此程序。 我可以成功编译它,但是当我运行程序时,我得到以下错误:

调试断言失败! 表达式:矢量下标超出范围。

在这个简单的程序中,我试图计算整数向量中的连续非零数的最大总和。

#include "stdafx.h"
#include <iostream>
#include <vector>

using namespace std;
int somme(vector<int> tab);

int main() {
vector<int> tab;
tab[0] = 2;
tab[1] = 3;
tab[2] = 0;
tab[3] = 0;
tab[4] = 4;
cout <<somme_consecutifs_max(tab) << endl;
return 0;
}

 int somme(vector<int> tab){
int sum(0);
int max(0);
for (int i = 0; i < tab.size(); ++i){
    if(tab[i] != 0) {
        sum += tab[i];
    }
    else{
        if(sum > max){
            max = sum;
        }
        sum = 0;
    }

}
    return max;
}

另一方面,为什么我不能在Visual Studio 2010中初始化我的int向量,原因如下:

vector<int> tab = {1, 2, 0, 0, 3};

1 个答案:

答案 0 :(得分:3)

当你这样做时

vector<int> tab;

初始化一个0大小的向量,你可以立即访问越界。你需要

vector<int> tab(5);

制作5号大小的矢量。或者,您可以将元素推回到矢量中,每次增加一个大小。

vector<int> tab;
tab.push_back(2);
tab.push_back(3);
....