Очистить Uninit Memory Read (UMR) на прокладке класса / структуры
Вопрос
Я испытываю довольно раздражающий побочный эффект от прокладки класса / структуры с Очистить .Например.
struct something {
int field1;
char field2;
};
/* ... */
struct something smth, smth2;
smth.field1 = 1;
smth.field2 = 'A';
smth2 = smth;
.
Последняя строка вполне вероятно, вызывает предупреждение UMR, говоря, что доступ к тому, что 3 байта инициализированной памяти доступны.Это, очевидно, является ложным положительным: нет пользовательских данных в последних трех байтах структуры, это просто прокладка.
Часто предупреждения очень быстро заполняют файлы журнала, что делает его очень трудно увидеть другие, реальные проблемы.
Есть ли кто-нибудь способ подавить ложные срабатывания?
Решение
У меня нет опыта с очисткой, но, возможно, явно инициализация первой структуры удаляет это предупреждение:
struct something smth = {0};
struct something smth2;
.
Я предполагаю, что ваши структуры имеют блок область (не файл).Если у них есть охват файла, нулевой инициализация неявна.