Я пишу проект C++ с Visual Studio 12.0 в Windows 8.1.Visual Studio, Debug Assertion Failed, MSVCP120D.dll
Казалось бы, из ниоткуда, следующий код:
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;
}
Что является причиной этой ошибки?
Не используйте стили C. Используйте C++ cast. Если вам нужен 'reinterpret_cast', чтобы заставить его строить, вы, вероятно, имеете что-то неправильно. Причина в том, что в этом случае 'std :: vector' сломан на C++ и хранит данные как битовый набор, а не массив bool. –