2012-04-28 3 views
-6

왜 초기화되지 않은 변수가 이상한 음수 값을 출력합니까? 당신이 (AN 초기화되지 않은 변수의 값을 읽기) 무슨 일을하는지왜 초기화되지 않은 변수가 이상한 음수 값을 출력합니까?

int x; 
cout << x << endl; 
+8

초기화되지 않았기 때문에. 그것은 이미 메모리에 그 장소에있는 모든 바이트가 발생합니다. – Wyzard

+1

기본적으로 x는 이전에 채워질 수있는 메모리 위치를 가리 킵니다. 당신은 아마도 그 가치를보고있을 것입니다. –

+0

그 변수는 실제로 시스템 메모리의 어딘가에 위치하기 때문에 그 위치에 무엇인가 넣지 않으면 메모리 위치가 사용 된 마지막 시간에 그 자리에 남아있는 가비지를 얻게됩니다. –

답변

13

undefined behaviour이다; 작동하는 것처럼 보이는 것부터 임의의 값 인쇄, 충돌, 신용 카드로 피자를 사는 것에 이르기까지 모든 일이 발생할 수 있습니다.

+4

신용 카드가없는 피자를 사면, 위의 프로그램을 매우 자주 실행합니다 : P –

+4

그래,하지만 UB 이후로는 토핑을 예측할 수 없었어. –

5

uninitialized variable은 선언 되기는하지만 알려진 값으로 설정되지 않은 변수입니다. 그것은 약간의 가치를 지니지 만 예측 가능한 것은 아닙니다.

+2

공식적으로, "불확정 값"을 가지고 있습니다. 즉, 읽는 것을 시도하는 것조차도 실패 할 수 있습니다 (다소간의 방식으로). –

0

변수가 초기화되지 않으면 "가비지 값"이 표시됩니다. 그 의미는 어디에서나 임의의 숫자가 될 수 있으며 실행중인 다른 응용 프로그램이나 큰 메모리 풀의 임의 번호에서 나올 수 있습니다.