6

我在我的项目中使用 stl 容器,我发现了一个我无法解释的奇怪错误。让我们考虑以下代码:

#include <iostream>
#include <vector>

int main(int argc, char** argv)
{
    std::vector<bool> vec;
    vec.resize(5, false);
    std::cout << vec.at(0);
}

这会按预期输出 0,但是如果我使用 drmemory 运行内存检查,它会发现未初始化的读取。任何人都可以帮助理解这种行为吗?

平台:win32;编译器:mingw32 - gcc 4.7.2;Drmemory 1.6.0 - 构建 2

4

1 回答 1

8

std::vector<bool>是个诡异的小东西,用比特玩弄来达到目的。在这种情况下,我很乐意建议您所看到的只是一条红鲱鱼。

话虽如此,使用其他容器可能会更好,因为这种模板专业化被普遍鄙视

于 2013-10-14T12:00:15.163 回答