这是我的工作代码:
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;
}
但是之前我尝试过具有output.reserve(m_elementSize * m_blockSize);
的代码
据我所知reserve
刚刚在内存中找到容器的位置。 resize
做同样的事情,还将内存从垃圾更改为某些给定值并更改容器大小。
fread
第一个参数是 void *
和unsigned char *
一样,我的问题,为什么我在调用 fread
时出现异常? .
为什么会这样?因为fread
采用 void 指针,它不使用 vector
写入内存类。
附言忘了说typedef std::vector<unsigned char> ByteVector
最佳答案
如果 vector 最初为空,则 output[0]
会调用未定义的行为(无论您预留了多少空间),并且在某些平台上它可能会抛出异常。
关于c++ - std::vector 调整大小与 fread 期间的保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18357440/