디버깅 옵션을 사용하는 Visual Studio는 알려진 값으로 메모리를 채 웁니다. g ++ (모든 버전, gcc 4.1.2가 가장 흥미 롭습니다)은 초기화되지 않은 로컬 POD 구조를 인식 할 수있는 값으로 채울 수있는 옵션이 있습니까?g ++은 초기화되지 않은 POD 변수를 알려진 값으로 채울 수 있습니까?
struct something{ int a; int b; };
void foo() {
something uninitialized;
bar(uninitialized.b);
}
예상치 못한 임의성이 예상됩니다. 최적화 및 경고가 켜지면 분명히 버그이며 쉽게 이 발견되었습니다. 그러나 -g 만 사용하여 컴파일합니다. 아니요, 경고입니다. 동료는 이 우연히 유효한 값을 가졌기 때문에 이와 유사한 코드가 작동하는 경우가있었습니다. 컴파일러가 업그레이드 될 때 실패하기 시작했습니다. 그는 새로운 컴파일러가 알려진 값을 구조 에 삽입했기 때문에 (VS가 0xCC를 채우는 많은 방법으로) 생각했습니다. 내 자신의 경험에서, 그것은 유효하지 않은 임의의 값인 과 다릅니다.
하지만 지금은 궁금하네요. 그렇지 않으면 표준이 초기화되지 않아야한다고 말하는 메모리를 채울 수있는 g ++의 설정이 있습니까?
나는 그 기능이 존재하지 않았다고 생각했지만, gcc 매뉴얼은 길고 깊다. 그리고 나는 그곳에 숨겨져있는 것에 놀랐다. –