C++ std::vector<bool> выдает ошибку неинициализированного чтения с использованием drmemory

Я использую контейнеры 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

1 ответ

Решение

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

При этом вам может быть лучше использовать какой-нибудь другой контейнер, потому что эта специализация шаблона повсеместно презирается.

Другие вопросы по тегам