STL Vector Problem mit \0



  • Hi
    Ich habe ein ganz kurrioses Problem bei einem vector<char>. Wenn ich folgenden Buffer habe:

    \037\213\b\0\0\0;ÜIIjHG
    

    Dann sehe ich beim Debug das der vector bis zur \0 alles in m_start einträgt doch danach macht er nur noch unsinn in m_finish. Das führt dann schließlich zu einer Speicherverletzung. Wie kann ich das umgehen?

    MfG cobra11freak



  • Kannst du die entsprechende Codestelle zeigen? Sind m_start und m_finish Membervariablen von std::vector ?



  • So hier die Codestelle:

    else
                    {
                    for (int i = 0; i < bytesRecv; i++)
                    {
                    response.data.push_back(buf[i]);
                    }
    

    Ja das werden wohl sowas wie Membervariablen von vector sein bei Codeblocks finde ich die jedenfalls im Debug unter dem Namen des vectors/ Vector_base<char Allokator>
    Vielen dank im voraus 😉
    MfG cobra11freak



  • Wo tritt denn die Speicherverletzung auf? Ist buf genügend gross?

    Du kannst den Vector übrigens einfacher füllen:

    std::vector vec(buf, buf + bytesRecv); // bei der Konstruktion
    vec.assign(buf, buf + bytesRecv);      // später
    


  • Hi die Speicherverletzung tritt in der zlib funktion unkompress auf da der vector die richtige größe zwar als size angibt allerdings soviel gar nicht im vector gespeichert ist...



  • cobra11freak schrieb:

    Hi die Speicherverletzung tritt in der zlib funktion unkompress auf da der vector die richtige größe zwar als size angibt allerdings soviel gar nicht im vector gespeichert ist...

    Ich denke nicht, dass dein std::vector einen Bug hat. Du solltest dich vielleicht nicht auf den Debugger verlassen, um die Anzahl Elemente zu zählen.

    Ansonsten, kann es sein, dass du inkonsistente Bibliotheksversionen linkst? Tritt der Fehler auf, wenn du alles nochmals neu kompilierst?



  • Ja da sind einige Bibliotheks Warnungen von der zlib die ich bisher aber ignoriert habe:

    ||Warning: .drectve `/DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBC" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
    ||Warning: .drectve `/DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBC" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
    ||Warning: .drectve `/DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBC" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
    ||Warning: .drectve `/DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBC" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
    ||Warning: .drectve `/DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBC" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
    

    Vielen Dank erstmal



  • Hi
    Das Problem könnte vielleicht sein, das ich mit GCC eine .lib datei linke? Vielleicht darf man das nicht...

    Mfg cobra11freak



  • Ja, die *.libs und *.objs sind AFAIK für Visual Studio Compiler.
    Für den GCC gibt es die *.a- und *.o-Dateien.



  • Ja und wie kann ich die konvertieren, weil ich habe bei der zlib keine gefunden oder gibt es da welche. Mensch ich will doch einfach nur ein paar daten dekomprimieren, ist denn das so schwer:(

    MfG cobra11freak



  • Wenn du Windows hast, dann nimm doch VS zum kompilieren. Sonst versuch doch, den Quellcode mal selber mit dem GCC zu kompilieren.



  • Ok vielen dank erstmal...
    Ich denke ich werde morgen mal versuchen meinen code unter visual studio zu kompilieren, leider hatte ich immer wo ich meinen unter codeblocks erstellten code unter visual c++ zum laufen bringen wollte das Problem das einige Sachen die unter MINGW erlaubt sind dort es nicht sind.

    MfG ciobra11freak


Anmelden zum Antworten