클래스 / 구조 패딩에서 정화의 초자진 메모리 읽기 (UMR)
문제
purify
struct something {
int field1;
char field2;
};
/* ... */
struct something smth, smth2;
smth.field1 = 1;
smth.field2 = 'A';
smth2 = smth;
.
마지막 줄은 초기화 된 메모리의 3 바이트에 액세스 할 때 UMR 경고를 매우 유발할 가능성이 높습니다.이것은 분명히 거짓 긍정적입니다. 지난 3 바이트의 구조체에는 사용자 데이터가 없습니다.
종종 경고는 매우 빠르게 로그 파일을 매우 빨리 채우고, 다른 실제 문제를 만나기가 매우 어렵습니다.
아무도 잘못된 긍정을 억압 할 수있는 방법을 알고 있습니까?
해결책
정화에 대한 경험이 없지만 첫 번째 구조체를 명시 적으로 초기화하는 것은이 경고를 제거합니다.
struct something smth = {0};
struct something smth2;
.
구조체가 차단 범위 (파일이 아님)가있는 경우 가정합니다.파일 범위가있는 경우 제로 초기화는 암시 적입니다.
제휴하지 않습니다 StackOverflow