2013-10-14 2 views
6

Я использую stl-контейнеры в своем проекте, и я обнаружил странную ошибку, которую я не могу объяснить. Давайте рассмотрим следующий код:C++ std :: vector <bool> дает неинициализированную ошибку чтения с использованием drmemory

#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 - build 2

+5

'vector ' странно. –

ответ

8

std::vector<bool> - причудливая маленькая вещь, использующая бит-тряску для достижения своих целей. Я был бы доволен в этом случае, чтобы предположить, что то, что вы видите, это просто красная селедка.

Это считается, you might be better off with some other container, т.к. this template specialisation is universally despised.