2011-03-01 10 views
6

Kiedy próbuję uruchomić tego programu pojawia się błąd, że program zatrzymuje się i mówi, „wektor indeks poza zasięgiem”Wektor indeks poza zakres błędu, C++

Każdy pomysł co robię źle?

#include <vector> 
#include <string> 
#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <sstream> 
using namespace std; 

//(int argc, char* argv[] 
int main() 
{ 
    fstream bookread("test.txt"); 
    vector<string> words; 

    bookread.open("test.txt"); 
    if(bookread.is_open()){ 
     cout << "opening textfile"; 
     while(bookread.good()){ 
      string input; 
      //getline(bookread, input); 
      bookread>>input; 
      //string cleanedWord=preprocess(input);   
      //char first=cleanedWord[0]; 
      //if(first<=*/ 
      //cout << "getting words"; 
      //getWords(words, input); 
     } 
    } 
    cout << "all done"; 

    words[0]; 

getchar(); 
} 
+0

http://stackoverflow.com/q/43108052/7276612[Nie wydaje się działać cały czas. Gdzie się mylę?] [1] – DamienArt1234

Odpowiedz

7

Nigdy nie wkładać żadnych słów vector, więc linia words[0]; jest nielegalne, ponieważ dostęp do niego pierwszy element, który nie istnieje.

+0

Dodałem words.push_back (input) w pętli while i nadal dostaję błąd – charli

+0

Sprawdź z dołączonym debuggerem, jeśli linia ta jest faktycznie osiągnięta przez program. Nie sądzę. –

+0

Mówi, że błąd jest wiersz 779? Ale program wyraźnie nie jest długi. – charli

2

Nie widzę, gdzie wciskacie cokolwiek do wektora. Jeśli wektor jest pusty, indeks 0 będzie poza zakresem.

0

Wygląda na to, że Twój program nigdy nie zostanie zaokrąglony, aby dodać coś do wektora, zwykle robiąc to z push_back(), więc w czasie wykonywania words[0] wygeneruje twój błąd subscript out of range.

Powinieneś sprawdzić rozmiar wektora przed uzyskaniem do niego dostępu.

Spróbuj tego:

for(vector<string>::const_iterator it=words.begin(), end=words.end(); it!=end; ++it){ 
    cout << *it << ' '; 
} 
0

Czy należy dołączyć wersję kodu, w którym faktycznie push_back sznurki na wektorze. Nie można debugować problemu, chyba że kod, na którym reprodukcję można przeglądać.