Ошибка C ++: сбой отладочного утверждения

0

Я пытаюсь запустить эту программу на Visual Studio 2010 Pro. Я могу скомпилировать его успешно, но когда я запускаю программу, я получаю следующую ошибку:

Ошибка отладки! Выражение: векторный индекс вне диапазона.

в этой простой программе я пытаюсь вычислить максимальную сумму consecutif non nul чисел в векторе целых чисел.

#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;
}

с другой стороны, почему я не могу инициализировать мой вектор int в Visual Studio 2010 в этом почему:

vector<int> tab = {1, 2, 0, 0, 3};
Теги:
debugging
vector
runtime-error
visual-studio-2010

1 ответ

3

Когда вы это сделаете

vector<int> tab;

вы инициализируете вектор размером 0, который вы сразу же получаете за пределы. Тебе нужно

vector<int> tab(5);

сделать вектор размером 5. Кроме того, вы можете вставлять элементы обратно в вектор, каждый раз увеличивая размер на единицу.

vector<int> tab;
tab.push_back(2);
tab.push_back(3);
....
  • 0
    Большое спасибо, как насчет инициализации векторов в VS2010 с использованием vector<int> tab = {1, 2, 0, 0, 3}; почему это невозможно?
  • 0
    @GambaOsaca Я ничего не знаю о VS2010 (или о какой-либо VS в этом отношении), но это синтаксис C ++ 11, и вряд ли версия VS поддерживает его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню