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);// <- aufgerufenWenn 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 EndeIm 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>());