Zugriff auf 2D vector erzeugt Absturz unter Windows
-
Hallo zusammen,
ich habe ein Problem mit dem Zugriff auf Elemente eines 2d std::vector. Hier erstmal ein Minimalbeispiel:
#include <vector> #include <iostream> using namespace std; typedef vector <int> i_vector; typedef vector <i_vector> i_matrix; int main() { i_vector eins; i_matrix zwei; eins[0] = 1; zwei.push_back(eins); cout << zwei[0][0]; }
Kompiliert wurde das ganze auf zwei Windows PCs mit MinGW ohne Fehler - Compileraufruf war:
Windows XP: g++ test.cpp
Windows 7: g++ -m64 test.cpp
Sobald das Programm gestartet wird kommt die Meldung "test funktioniert nicht mehr".
Wenn ich Ausgaben a la "cout << "Bis hier ist alles gut";" zwischen den Zeilen einfüge, tritt der Crash auf, sobald variable[x][y] aufgerufen wird, also die Matrix mit zwei Indices.Kompiliere ich das ganze unter Debian oder Mac OS X funktioniert das Programm problemlos.
Wo liegt mein Fehler?
-
Warauf gedenkst du in Zeile 14 zuzugreifen? Auf einen validen Speicherbereich, welcher vorher vom vector reserviert wurde? Nein, woher soll der das denn wissen?
Der Vector hat eine Länge von 0 und da er bei [] keine überprüfung auf einen validen index durchführt (bei at macht er das), kommt es zu undefiniertem verhalten. Manchmal gehts, manchmal auch nicht.
-
OK, das Minimalbeispiel war doch zu minimal, entschuldigung dafür.
Wenn ich Zeile 11 ändere in "i_vector eins(4);" funktioniert es.
Allerdings funktioniert es in dem eigentlichen Programm nicht. Sobald ich Zeit habe werde ich daher das Minimalbeispiel hier erweitern.
-
Problem gelöst.
Der vector wurde nicht ordnungsgemäß gefüllt. Ursache war das Einlesen von Daten aus einer Datei mit anderem Zeilenumbruch \r\n statt \n