2014-10-12 2 views
-4

Я ве получил этот кодC++ станд :: out_of_range вектор :: _ M_range_check

#include <iostream> 
#include <cstdio> 
#include <vector> 
#define NMax 100 

using namespace std; 

vector <int> v(100); 
int n; 

FILE* in = freopen("input.in", "r", stdin); 
FILE* out = freopen("output.out", "w", stdout); 

void afiseaza(){ 
    int i; 
    for(i = 1; i <= n; i++){ 
     fprintf(out, "%d", v.at(i)); 
    } 
    fprintf(out, "\n"); 
} 

void bkt(int i){ 
    if(i == n + 1) afiseaza(); 
    else{ 
     int i, j; 
     for(j = v.at(i-1); j <= n; j++){ 
      v.at(i) = j; 
     } 
     bkt(i+1); 
    } 
} 

int main() 
{ 
    int i, j; 
    fscanf(in, "%d", &n); 
    bkt(1); 

    fclose(in); 
    fclose(out); 
    return 0; 
} 

Он бросает ошибку станд :: out_of_range и я не могу понять, почему размер вектора находится в пределах. Попытался найти дополнительную информацию об ошибке, но не могу найти проблему на моем коде Ty для вашего времени

+3

'размер вектора находится в границах, очевидно, нет. – user657267

+0

, так как у вас есть условие '<= n', то это означает, что' n' должно быть не более 99 – Creris

ответ

1

Добавление этого в качестве отдельного ответа, потому что это совершенно отдельная вещь из моего первого предложения. В цикле в bkt вы объявляете новую локальную область i, которая скрывает параметр функции и имеет неопределенное значение. С помощью этого i, вероятно, вы получаете исключение.

+0

да, это было, так жаль, что я не мог видеть –

0

Векторный индекс 0-based, действительные значения от 0 до размера-1. Если я правильно отслеживаю код, вы получаете доступ к индексу - 1 при первом вызове bkt, если вы вводите 0 или меньше для n, а затем укажите размер индекса в afiseaza.

Я предлагаю вам использовать отладчик для перехода по вашему коду и наблюдения за значениями, когда вы идете.

+0

sry, изначально я сказал bkt (1), но я редактировал так много раз. Ошибка все еще существует. Afiseaza был сделан для чисел от 1 до n –

+1

Я поддерживаю свое предложение отладчика. Вы достигаете 'at()' вызова с плохим значением, и вам нужно выяснить, почему. –

0

В первый раз, когда ваш код пытается получить доступ к v, он вызывает v.at(-1). Это явно выходит за пределы.

+0

sry, изначально я сказал bkt (1), но я отредактировал так много раз. Ошибка все еще существует. –

Смежные вопросы