Vector subscript out of range



  • Hallo miteinander

    Ich hab ein kleines Problem, bei dem ich irgend einen Denkfehler mache, welchen ich aber nicht finde:

    std::vector< std::string > allItems;
    std::string item;
    static std::vector< const char * > x_achse;
    unsigned int q;
    
    while( getline( fin, item)){		                                       // Datei-Inhalt in Vector speichern
            allItems.push_back(item);
    }
    /*
            Vector verkleinern (Elemente löschen)
    */
    for(q = 0; q < allItems[0].size(); (q = q + 8) ){
    	static int NUM_points = 0;
            x_achse[NUM_points] = allItems[0].substr(q, 2).c_str();			// 16Bit X-Achse
            NUM_points ++;
    }
    /*
            x_achse-Inhalte an RS232 senden
    */
    

    Dabei wird bei der Debugg-Version beim Öffnen einer Datei die Fehlermeldung "...Vector: subscript out of range...." angezeigt, und ich habe momentan keine Ahnung, wieso.
    Das Problem entsteht in Zeile 13 des obigen Codes, beim copieren des Vectorinhaltes in den anderen.

    Ich hoffe ihr könnt mir weiterhelfen
    Besten Dank für die Hilfe
    MFG
    P51D



  • Ich sehe gar nicht, dass du x_achse irgendwann mal Elemente hinzufügst (push_back). Du erzeugst einen leeren vector und willst dann den nicht existenten Elementen 0, 1, usw. Werte zuweisen.



  • ah, ok.

    jetzt habe ich aber noch ein anderes Problem in diesem Zusammenhang:

    std::vector< std::string > allItems;
    std::string item;
    static std::vector< const char * > x_achse;
    unsigned int q;
    
    while( getline( fin, item)){                                               // Datei-Inhalt in Vector speichern
            allItems.push_back(item);
    }
    /*
            Vector verkleinern (Elemente löschen)
    */
    for(q = 0; q < allItems[0].size(); (q = q + 8) ){
            x_achse.push_back( allItems[0].substr(q, 2).c_str() );            // 16Bit X-Achse
    }
    

    An den Comport wird dann so gesendet:

    ComWrite( comport, /* Vector Werte */ );
    

    Wie bekomme ich die Werte jetzt wieder aus dem Vector, da bei "const char *" kein Substring oder dergleichen existiert?
    In x_achse werden jeweils 16Bit Werte gespeichert, die eine Positionsvorgabe für den MCU darstellen.

    Zusatzfrage:
    Wieso geht

    allItems[0].substr(q,2).c_str();
    

    und

    allItems.substr(q,2)....
    

    nicht? Du hast was von Inexistenten 0, 1, 2... gesagt.

    Besten Dank nochmals für die Hilfe
    MFG
    P51D


Log in to reply