www whatwg what standard language español 3wc c++ vector resize fread

c++ - standard - whatwg español



std:: vector resize vs reserve during fread (2)

He encontrado el problema, ahora uso el código que llamé trabajo

Quería evitar el cambio de resize innecesario porque funciona con datos en la memoria, sin embargo, después de la output[0] reserve output[0] no existe.

Lo que es más, después del tamaño del vector lectura sería cero y el cambio de resize destruiría los datos leídos.

Este es mi código de trabajo:

size_t FileReader::Read(ByteVector& output) { output.resize(m_elementSize * m_blockSize); size_t read = fread(&output[0], m_elementSize, m_blockSize, m_file); output.resize(read); return read; }

Sin embargo, anteriormente he probado el código que tenía output.reserve(m_elementSize * m_blockSize);

Por lo que sé, la reserve solo encuentra un lugar en la memoria para el contenedor. resize el resize hacer lo mismo, también cambia la memoria de la basura a algunos valores dados y cambiar el tamaño del contenedor.

fread primer parámetro de fread está void * y es lo mismo que unsigned char * , mi pregunta, ¿por qué recibí una excepción al llamar a fread ?

¿Por qué está sucediendo? Porque fread toma el puntero void y no escribe en la memoria usando vector clase vector .

PD se olvidó de mencionar typedef std::vector<unsigned char> ByteVector


Si el vector está inicialmente vacío, la output[0] invoca un comportamiento indefinido (independientemente de la cantidad de espacio que haya reservado), y en algunas plataformas puede arrojar una excepción.