構造体のベクトルをファイルに書き込もうとすると問題が発生します。
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);
}
ここで、頂点配列は次のように定義されます。
std::vector<VertexData_VNT> vertexArray;
VertexData_VNT は、float のみを含む 32 バイトの構造体です。
ほとんどの場合、fwrite は「無効な引数」エラーで失敗し、何も書き込みません。うまくいくこともありますが...それは私には意味がありません。
上記の行のコメントを外すと、代わりに同じ fwrite ステートメントで「アクセス違反読み取り場所」例外が発生します。fwrite.c の 139 行目の memcpy に問題があるようです。
誰にもアイデアはありますか?