IStream::Read in std::vector - Crash..



  • Hi!

    Ich würde gerne einen IStream in einen std::vector einlesen.

    STATSTG stat;
    stream->Stat(&stat, 0);
    
    unsigned long numBytes = stat.cbSize.LowPart;
    
    LARGE_INTEGER dummy2 = { };
    stream->Seek(dummy2, STREAM_SEEK_SET, 0);
    
    // So funkioniert es:
    
    unsigned char* buf = new unsigned char(numBytes);
    
    unsigned long dummy = 0;
    stream->Read(buf, numBytes, &dummy);
    
    // So leider nicht, aber warum? (nachträgliches .resize() bringt auch nix)
    
    std::vector<unsigned char> data(numBytes);
    stream->Read(&data[0], data.size(), &dummy); // Vector subscript out of range
    

    Kapier ich nicht. Der vector wird doch auf die Größe eingestellt. Außerdem wird Read() die .size() übergeben, also sollte auch nicht mehr eingelesen werden, als der vector (defaultkonstruierte) Elemente hat.

    😕



  • Ich seh grad, dass ich sogar

    new unsigned char(numBytes);

    anstatt

    new unsigned char[numBytes];

    geschrieben habe, also nur ein Element erstellt wird. Noch seltsamer, dass es gerade dann funktioniert..



  • Sorry, numBytes war Null 🙄
    Bin mir ziemlich sicher, dass es nur daran lag.


Anmelden zum Antworten