Vector subscript out of range
-
Bei ausführen folgendes Codes kommt folgende Fehlermeldung:
std::vector<int> numbers; for(int n = 1; n <= Parameter[2]; ++n) { numbers.push_back(n); } std::random_shuffle(numbers.begin(), numbers.end()); int Zahl[2000]; int Zahlen = 0; String^ Keykette; std::string Zeichen; std::stringstream Reihe; while (Zahlen < Parameter[2]) { Zahlen ++; std::stringstream convert; Zahl[Zahlen] = numbers[Zahlen]; convert << Zahl[Zahlen]; Zeichen = convert.str(); convert.clear(); convert.str() = ""; Reihe << Zeichen.c_str(); Reihe << "|"; } std::string Base = Reihe.str(); Reihe.clear(); Reihe.str() = ""; //richTextBox1->Text = String(BasePointer); std::ofstream SaveKey; SaveKey.open("Testkey.key",std::ios::out); SaveKey << Base; SaveKey.close();
Fehlermeldung:
Debug Assertion Failed
Programm: ...
File: D:\Programme\Microsoft Visual Studio 9.0\VC\include\vector
Line: 779Expression: Vector subscript out of range
....
Habe das Gefühl ,dass er mehr aus dem Vector lesen will als vorhanden ist.
Parameter[2] ist 72
-
Dies steht in der Datei:
526752|13|8|1233696|0|0|0|0|0|0|0|0|0|0|1232524|0|1232524|1232644|1232620|0|0|0|0|0|0|0|0|0|0|0|0|0|1233376|114614022|1232228|2050152206|-1|2045354333|2045354393|114613998|1232228|2050152206|-1|2045354333|2045354393|1232172|0|1232276|1232804|1233400|2045255066|114613934|512|1234188|1|1233376|1232240|2050147316|-1|2045255066|2045256313|114613894|512|1234188|1|1233376|1233908|2050093400|-1|2045243880|2046618582|114608122|
also es hat nun geklappt mit Zahl[Zahlen-1] = numbers[Zahlen-1]
diese Ausgabe irritiert mich etwas denn es sollte etwa so aussehen:
25|1|56|52|37|9|72|.....|10|71|
-
Falls ich deinen Code richtig verstanden hab, ist er hier nochmal in kürzer (edit: und sollte funktionieren):
// Zufällige Zahlen erzeugen std::vector<int> numbers( Parameters[2] ); for( size_t i=0; i<numbers.size(); ++i ) numbers[i] = i+1; std::random_shuffle( numbers.begin(), numbers.end() ); // Version A, schreibt direkt in die Datei std::ofstream SaveKey( "Testkey.key", std::ios::out ); for ( size_t i=0; i<numbers.size(); ++i ) SaveKey << numbers[i] << '|'; // Version B, setzt den String vorher zusammen std::stringstream ss; for ( size_t i=0; i<numbers.size(); ++i ) ss << numbers[i] << '|'; std::ofstream SaveKey( "Testkey.key", std::ios::out ); SaveKey << ss.str();
edit 2: Wobei sich die Schleife in Version A noch durch
std::copy( numbers.begin(), numbers.end(), std::ostream_iterator<int>(SaveKey,"|") );
ersetzen ließe.
-
Tim06TR schrieb:
also es hat nun geklappt mit Zahl[Zahlen-1] = numbers[Zahlen-1]
diese Ausgabe irritiert mich etwas
Vielleicht hattest du vergessen, das "-1" auch in der Zeile darunter hinzuzufügen, bei
convert << Zahl[Zahlen];
?
-
Danke jetzt geht es FEHLERLOS
Ganz nebenbei ist es 100 mal so kurzich muss mich eben noch mit MFC vertraut machen, ich hab bisher nur Standart und VCL geschrieben
EDIT: Danke und ich nahm Variante A, da das bei einem höheren Param (1920) schon etwas heftiger wird mit dem Stack.