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


Anmelden zum Antworten