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>
это странная мелочь, использующая немного твиддлинга для достижения своих целей. Я был бы рад в этом случае предположить, что то, что вы видите, это просто красная сельдь.
При этом вам может быть лучше использовать какой-нибудь другой контейнер, потому что эта специализация шаблона повсеместно презирается.