int main(int argc, char *argv[])
{
int n=0;
int* p=&n;
int i=1, numberOfZero=0;
//3308부터 *p는 0만 나오고 i<4145 부터 죽는다.
while(i<4144){
if(*p == 0){
numberOfZero++;
}
printf("%d번째주소: %d, 들어있는 값: %d \n",i, p, *p); // p++를 하면서 그곳의 주소와 들어있는값을 출력
p++;
i++;
}
printf("0의 개수 : %d\n",numberOfZero); //*P 가 0인 곳의 개수 출력
system("PAUSE");
return EXIT_SUCCESS;
}
변수 n의 주소를 담는 포인터변수 pn을 만들고, p++; 로 그다음에 들어있는 값(쓰레기 값)들을 출력하는 건데요.
질문좀 해도될까요?
1. 위에껄 while( i < 101){...} 로 바꿔서 *p 부터 *(p+100) 까지 돌려보면 numberOfZero 가 28이 나오는데요.
쓰레기 값이 들어있을 텐데 0이 28개나 나오는건 좀 많아보이는데 이건 우연인가요?
저걸 3300까지돌리면 대략 300개 정도 0이 나와요.
쓰레기값이 들어있을 메모리에 대략 10%확률로 0이 들어있단 얘긴데 이건 어떻게 받아들여아하나요?
정상적인 확률인지 잘 모르겠지만 제생각엔 0이 너무많이 나오는거 같아서요..
2. while 문을 i 가 3308일까지 돌리면 *p 는 무작위 숫자가 나오는거같은데, 3309부터 4143까지는 0만 계속 나와요.
쓰레기 값이들어있으면 이상한 숫자들이 나와야 될거같은데 왜 저구간에선 0만 계속 나올까요?
제가 어제 제 나름으로 전체 메모리를 0으로 초기화 하는 프로그램을 돌렸었는데 그거의 영향인가요?
3. 그리고 i 가 4143이상이면 무조건 프로그램이 죽어요. 실행은되는데 내프로그램.exe의 작동이 중지되었습니다. 라고하면서 죽어요..
그래서
int n=1;
int* pn=&n;
pn=pn+4142;
printf("%d\n",*pn);
이렇게 해서 실행해봤는데 pn+4142 까지는 되는데 pn+4143 부터는 무조건 죽네요.
대신 pn+60000 처럼 완전 큰수를 넣으면 실행이 돼요. 대신 실행되는 숫자는 프로그램 실행할때마다 바뀌더군요..어떨땐 61000이 오류나고, 어떨땐 63000에서 오류나고...
왜 이런건가요? 제가 다른프로그램이 사용중이 메모리에 접근할려고 해서 그런건가요?