Очистить Uninit Memory Read (UMR) на прокладке класса / структуры

StackOverflow https://stackoverflow.com/questions/3298133

  •  18-09-2020
  •  | 
  •  

Вопрос

Я испытываю довольно раздражающий побочный эффект от прокладки класса / структуры с Очистить .Например.

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;
.

Я предполагаю, что ваши структуры имеют блок область (не файл).Если у них есть охват файла, нулевой инициализация неявна.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top