Probleme mit Vektoren, out of range
-
Hallo
arbeite gerade an einem projekt in c++;hier ist ein teil meines codes, kann mir jemand sagen warum immer out of range kommt? ne kleine Erklärung würde mir bereits reichen^^
thx schonmal
vector<vector<string> > addressen(zeilenzahl, vector<string>(9)); int addressTeil = 0; int zeile = 0; int zeichenPosition = 0; string wort; while (eingelesen [zeichenPosition] != '\0') { while (eingelesen [zeichenPosition] != '\n') { while (eingelesen [zeichenPosition] != ':') { wort = wort + eingelesen [zeichenPosition]; zeichenPosition = zeichenPosition + 1; } addressen [zeile] [addressTeil] = wort; wort.clear(); addressTeil = addressTeil + 1; zeichenPosition = zeichenPosition +1; } zeichenPosition = zeichenPosition +1; addressTeil = 0; zeile = zeile +1;
-
Ich kann es nicht kompilieren. Ich weiß damit auch nicht, wann ou-of-range auftritt.
-
SunnyBoy124 schrieb:
kann mir jemand sagen warum immer out of range kommt? ne kleine Erklärung würde mir bereits reichen^^
du verwendest einen zu hohen Index beim Zugriff auf einen vector. Der Debugger hilft bei sowas meistens.
Irgendwie sehen deine while-Schleifen seltsam aus, auf den ersten Blick stimmt da auch die Klammerung nicht. Formatiere die doch bitte mal ordentlich.
-
#include "stdafx.h" #include <iostream> #include <fstream> #include <string> #include <vector> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { vector<vector<string> > addressen(zeilenzahl, vector<string>(9)); int addressTeil = 0; int zeile = 0; int zeichenPosition = 0; string wort; while (eingelesen [zeichenPosition] != '\0') { while (eingelesen [zeichenPosition] != '\n') { while (eingelesen [zeichenPosition] != ':') { wort = wort + eingelesen [zeichenPosition]; zeichenPosition = zeichenPosition + 1; } addressen [zeile] [addressTeil] = wort; wort.clear(); addressTeil = addressTeil + 1; zeichenPosition = zeichenPosition +1; } zeichenPosition = zeichenPosition +1; addressTeil = 0; zeile = zeile +1; } getchar(); }okay, hab jetzt mal den codeteil n bischen grosszügiger direkt auf VC++ kopiert, richtig laufen kann es so nicht aber sollt kompiierbar sein, egal wie ich die while schleifen ändere, out of range kommt einfach immer^^
was meinst du mit einem zu hohen index?
-
hab ichg noch vergessen:
der string der übertrage wird heisst eingelesen, den müsste man zum testen noch füttern^^
-
SunnyBoy124 schrieb:
was meinst du mit einem zu hohen index?
Er meint, dass nicht für alle Werte von
zeichenPositiongiltzeichenposition < eingelesen.size().
Damit schlägt eineingelesen[zeichenposition]fehl.
-
Wenn in dem Text kein ':' Vorkommt, bleibt dein Programm in der inneren Schleife gefangen.
Es wird nur beendet, wenn der Text mit ":\n" aufhört.
-
Also ein ':' kommt immer vor, vlcht hätte ich erwähnen sollen dass der string zu diesem zeitpunk so formatiert ist:
aaa:bbb:ccc:ddd\naaa:bbb:ccc:ddd
-
Furble Wurble schrieb:
SunnyBoy124 schrieb:
was meinst du mit einem zu hohen index?
Er meint, dass nicht für alle Werte von
zeichenPositiongiltzeichenposition < eingelesen.size().
Damit schlägt eineingelesen[zeichenposition]fehl.daran könnte es wirtklich liegen, an der Stelle hab ich gar nicht gesucht, aber wenn ich mir das jetzt so überlege^^
werd ich dann gleich mal umschreiben und testem.
Thx
-
SunnyBoy124 schrieb:
Also ein ':' kommt immer vor,
Trotzdem ist es schlecht wenn durch so einen Fehler das Programm abstürzt.
SunnyBoy124 schrieb:
vlcht hätte ich erwähnen sollen dass der string zu diesem zeitpunk so formatiert ist:
aaa:bbb:ccc:ddd\naaa:bbb:ccc:ddd
Dann mach doch noch mal ein :\n ans Ende und probier es aus.
Wen du die '\0' gefunden hast ist Schluss.
Du brauchst nur eine Schleife (mit dem '\0').
Darin kannst du dann mit if deine anderen Bedingungen überprüfen.