c++ - std::vector 调整大小与 fread 期间的保留

标签 c++ vector resize fread

这是我的工作代码:

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/

相关文章:

c++ - 使用 vector 随机洗牌

jframe的java缩放

c++ - 使用二维字符数组的内容填充字符串的C++ vector :大小太大时失败

C++编译时断言BASE是EXTENDED的基类并且具有相同的内存地址

c++ - 找到多边形的质心?

c++ - 如何将 std::find() 与自定义类的 vector 一起使用?

c++ - 如何返回列表中指针的值?

c# - 管道未正确读取数据

html - 如何阻止表格移动

javascript - 调整显示大小后重新加载 jquery 脚本