Vektorinhalte falsch initialisiert?Debug/Release



  • Hallo Leute,

    ich habe einen verkapstelten leeren Vektor.

    std::vector<std::vector<std::string> > vect(2, std::vector<std::string>());
    

    Dieser wird einer Funktion übergeben.

    int FuncFoo(char * RecvBuffer, &vect){
    
    while(Bedingung){
    
    RecvBuffer splitten, Zeiger Spielereien(nach dem letzten Buchstaben ein \0 setzen, etc..
    
    /*
    Habe dann 2 char * auf std::strings.
    */
    
    vect[0][a].push_back(charPointer1);
    vect[1][a].push_back(charPointer2);
    };
    
    return 0;
    }
    
    FuncFoo(RecvBuffer, vect);// <- aufgerufen
    

    Wenn ich mir die Daten ausgebe:

    for(int i = 0; i < vect[0].size(); ++i){
    std::cout << vect[0][i] << "@" << vect[0][1] <<" Ende" <<  std::endl;
    }
    

    Im DebugModus:

    Key1@Value1 Ende
    Key2@Value2 Ende
    Key3@Value3 Ende

    Im Release

    Key1@Value1 Ende
    Key2@Value2 Ende
    Key3@Value3
    (Ganz viel Freiraum...)

    (paar komische Zeichen) Ende

    Weiß jemand woran es liegen könnte?

    Ohne Code zu posten ist es natürlich schwer herauszufinden, aber ist denke ich zu viel und da ist Code drinne, der nicht öffentlich werden sollte 😃

    Danke

    //mir fällt gerade auf, dass ich gar keinen WinApi Code drinne habe im Beispiel 😡 😞

    Also bitte verschieben



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum WinAPI in das Forum C++ (auch C++0x, bzw. C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich vermute mal, dass einer der "charPointer" nicht korrekt nullterminiert ist. Aber sag mal.. wozu brauchst du denn einen std::vector<std::vectorstd::string>? Und ich hoffe "charPointer" sagt nicht aus, dass du hier noch manuelle Speicherverwaltung nutzt? 🙂



  • Der CharPointer FuncFoo(charpointer,..) ist ein Pointer des Recv-Buffers, den mal erhält und ist nullterminiert 🙂

    Die char* die ich _in_ der FunFoo erhalte, erhalte ich von strtok zurück.
    Die werden dann im Vektor "gepusht".
    In der selbst geschriebenen Funktion sind sie im Debug nullterminiert, im Release nicht.

    Im Endeffekt erhalte ich durch strtok einen char* auf einen 80 Zeichen langen string.
    Dann wird der char* bis zum Ende inkrementiert(strlen). Von dort aus, solange zurück, solange der char* strokPointer == " ", an der letzten " " eine Nullterminierung setzen. Zurück zum Anfang.

    Nein, keine manuelle Speicherverwaltung 🙂

    Sorry, meinte natürlich:

    std::vector<std::string> > vect(2, std::vector<std::string>());
    

Anmelden zum Antworten