Я знаю, что Visual Studio под вариантами отладки заполнит память известным значением. Действительно ли g ++ (любая версия, но gcc 4.1.2 наиболее интересна), есть ли какие-либо опции, которые бы заполнили неинициализированную локальную структуру POD с узнаваемыми значениями?Может ли g ++ заполнить неинициализированные переменные POD с известными значениями?
struct something{ int a; int b; };
void foo() {
something uninitialized;
bar(uninitialized.b);
}
Ожидается, что uninitialized.b
будет непредсказуемым случайностью; явно ошибка и легко найти , если оптимизация и предупреждения включены. Но скомпилировано только с -g, нет предупреждение. У коллеги был случай, когда код, подобный этому, работал, потому что по совпадению имел действительное значение; когда компилятор обновился, он начал сбой. Он думал, что это связано с тем, что новый компилятор вводил известные значения в структуру (так же, как VS заполняет 0xCC). По моему собственному опыту, это было просто отличное от случайных значений, которые не были действительными.
Но теперь мне любопытно - есть ли какие-либо настройки g ++, которые заставляют его заполнять память, которую стандарт в противном случае сказал бы, должен быть неинициализирован?
Я не думал, что функция существует, но руководство gcc длинное и глубокое, и я был удивлен тем, что там скрыто раньше. –