Visual Studio,Debug Assertion Failed,MSVCP120D.dll

时间:2015-04-12 04:32:34

标签: c++ visual-studio visual-studio-2012

我在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;
}

导致此错误的原因是什么?

1 个答案:

答案 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类型的数组。