我在Windows 8.1中使用Visual Studio 12.0编写C ++项目。
看似无处,以下代码:
int main()
{
std::fstream file_out("test.dat", ios::out | ios::binary | ios::trunc);
std::vector<bool> a(100, true);
file_out.write((char*)&a[0], 100 * sizeof(bool));
file_out.close();
std::fstream file_in("test.dat", ios::in | ios::binary);
std::vector<bool> b(100, false);
file_in.read((char*)&b[0], 100 * sizeof(bool));
file_in.close();
return 0;
}
给我以下运行时错误:
Debug Assertion Failed!
Program: C:\Windows\SYSTEM32\MSVCP120D.dll
File: C:\Program Files (x86)\Microsoft Visual Studio
12.0\VC\include\xutility
Line: 201
Expression: ITERATOR LIST CORRUPTED!
但仅限于在调试模式下运行时;在发布模式下,运行正常。
但是,在调试模式下,以下代码运行正常(更改为int向量,而不是bool向量):
int main()
{
std::fstream file_out("test.dat", ios::out | ios::binary | ios::trunc);
std::vector<int> a(100, true);
file_out.write((char*)&a[0], 100 * sizeof(int));
file_out.close();
std::fstream file_in("test.dat", ios::in | ios::binary);
std::vector<int> b(100);
file_in.read((char*)&b[0], 100 * sizeof(int));
file_in.close();
return 0;
}
导致此错误的原因是什么?
答案 0 :(得分:0)
您的代码假定std::vector<bool> a(100)
创建一个向量,该向量包含大小等于100 * sizeof(bool)
个字节的连续数组。这是不正确的。
简而言之,std::vector<bool>
是矢量的专用版本。它不仅仅是一个包含在类中的bool
数组。
http://en.cppreference.com/w/cpp/container/vector_bool
假设您的数组大小始终保持不变,一个解决方案就是声明
bool a[100];
或
std::array a<bool, 100>
确实你有100个bool
类型的数组。