Problem mit vector<string> und Visual C++ 6



  • Hi,

    ich habe ein Problem mit einem String Vector unter Visual C++ 6;

    in einer HeaderDatei deklariere ich im private Teil einer Klasse diesen Vector:
    vector<String> Operators;

    In der Funktion in der ich den Vector verwenden will Lege ich die Größe mit
    Operators.reserve(100); fest.

    Wenn ich ein Element des Vectors initialisieren möchte Stürtzt mein Programm an dieser Stelle ab:
    Operators[1] = "BLBLA"; --> Absturz!!!!!

    Um den Visual C++ Warnungen zu entgehen die Beim verwenden von String Vektoren auftreten habe ich noch folgendes eingetragen:
    #pragma warning (disable: 4786)

    Der Compiler Zeigt beim Compilieren des Quellcodes keinen Fehler an, trotzdem kommt es zum Absturz!!!

    Es wäre nett wenn mir jemand erklähren könnte warum es beim initialisieren des Vectors zu einem Absturz kommt und einen Lösungsvorschlag hätte.

    Für eure Mühe im Voraus besten Dank!!!!!!

    mfg
    -CodeMaster-



  • Versuch es mal mit:

    Operators.resize(100);

    Ansonsten poste einfahc noch etwas mehr Code, vielleicht liegt der Fehler ganz woanders.



  • Genau daran wirds liegen. reserve holt nur Speicher, aber vergrößert den gültigen Bereich des Vektors nicht (bzw. erzeugt keine neuen Elemente). Wenn du dann einem dieser ungültigen Objekte etwas versuchst zuzuweisen, kommt es zum Absturz, weil der Zuweisungsoperator immer von einem gültigen Objekt ausgeht.



  • Danke Leute ihr habt mir sehr geholfen!!!

    Aber ich hätte noch eine Farge zu dem Thema??

    warum Funktioniert das ganze wenn ich als ADtentyp für den Vector int; float oder double angebe!!!

    in der Headerdatei:
    vector<int> Test;
    in der Funktion
    Test.reserve(100);
    Test[1] = 1;
    Dies ergibt keinen Fehler und ich kann auch ganz normal mit diesen Werten rechen!!!!

    Könnt ihr mir das bitte erklären??

    mfg
    -CodeMaster-



  • -CodeMaseter- schrieb:

    Könnt ihr mir das bitte erklären??

    zufall

    immer wenn 'undefiniertes verhalten' entsteht, so wie in deinem beispiel, kann alles passieren.


Anmelden zum Antworten