#include <stdio.h>
#include <stdlib.h>
void foo(int **a)
{
int u=70;
*a = &u;
printf(\"u\'s value : %d\\n\",**a); -> (1)
}
int main()
{
int *b;
foo((int **)&b);
printf(\"after foo value : %d \\n\",*b); -> (2)
}
- 환경 : vc++6.0, 윈도우7
위 소스코드에서, (1)을 주석처리 할 경우랑 주석처리 하지 않았을 경우 (2)이 화면에 출력되는 값이 다르게 나옴.ㅠㅠ
(1) 주석 처리 하지 않을 경우 화면 출력값은
u\'s value : 70
after foo value : 4241497
(1) 주석처리 하였을 경우 화면 출력 값은
after foo value : 70
이렇게 나오는데.. 왜 이런거지..?? **a 이게 하나의 연산을 수행하는건가..??
왜 이렇게 값이 바껴서 나오는걸까.. 그리고 한가지 더 궁금한게 있다면, 스택영역에 할당 된 변수를 이중포인터가로 캐스팅해서 가르키는데,
함수 호출 끝나면 지역변수가 스택에서 다시 해제 될텐데, (1)주석 처리 했을 경우에 함수에 선언된 지역변수의 값을 가지는 건 어떻게 가지는건지
궁금함.ㅠㅠ 답변 부탁용~~
먼가 잘못했겠지.. 뒤에나 앞이나 같은수가 나와야맞어..
컴파일러 문제같은데? VS2008에서 똑같은 코드 실행시켜보면 이런현상 안생김. 그러니까 엿같은 6.0쓰지말고 제발 컴파일러 새거 나오면 새거 쓰라고. mfc때문에 6.0쓰는거면 이해를 하겠는데 mfc쓰는것도 아니면서 아직까지 6.0쓰는 종자들은 도대체 이유가 뭐임?
스택 해제되니깐 쓰레기값이 나오는게 맞는데 컴파일러가 볍진인듯