c++ - 写入 vector 数组时,fwrite 因参数无效而失败

标签 c++ vector fwrite

我在尝试将结构 vector 写入文件时遇到问题。

void Obj::Write(wchar_t const* filename)
{
    FILE* file;
    errno_t err = _wfopen_s(&file, filename, L"wb");
    assert (file && !err);

    assert (sizeof(VertexData_VNT) == 32);
    assert (vertexArray.size() == 1654);

    //unsigned int const vertexCount = vertexArray.size();
    //if (fwrite(&vertexCount, sizeof(unsigned int), 1, file) != 1) {
    //    perror ("fwrite(&vertexCount, ...) error:");
    //}

    if (fwrite(&vertexArray, sizeof(VertexData_VNT), vertexArray.size(), file) != vertexArray.size()) {
        perror ("fwrite(&vertexArray, ...) error:");
    }

    fclose(file);
}

其中 vertexArray 定义为:

std::vector<VertexData_VNT> vertexArray;

VertexData_VNT 是一个仅包含 float 的 32 字节结构。

大多数时候 fwrite 会因“无效参数”错误而失败,并且什么也不写。虽然有时它工作得很好......这对我来说没有意义。

如果我取消注释上面的行,我反而会在同一个 fwrite 语句中得到一个“访问冲突读取位置”异常。 fwrite.c 中的 memcpy 似乎有问题,第 139 行。

有人有什么想法吗?

最佳答案

尝试使用 &vertexArray[0] 而不是 &vertexArray

std::vector 动态分配空间。数据位于 std::vector 对象所在的位置,而是位于堆上的某个位置,并且 vector 通常只包含几个指针。

关于c++ - 写入 vector 数组时,fwrite 因参数无效而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14428291/

相关文章:

c++ - 将 srand 用于随机种子时重复输出

c++ - 从人 vector 插入和读取文件时出错

C++ vector 错误(Visual C++ 2008 Express Edition)

c++ - 移动语义 C++11(Bjarne Stroustrup 书,第 75 页)

c - 在文件描述符上使用 fwrite/将文件描述符转换为文件指针

c++ - 在 C++ 中运行 shell 脚本

c++ - C++ 2011 中的 nextafter 与 nexttoward 函数?

c++ - 在qt中从mpv单击鼠标

php - 如何向文件 php 添加附加文本

java - 用Java写入ftp服务器上的文本文件