gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 16:19:47 27 4
gpt4 key购买 nike

这是我的工作代码:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com