게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
질문) 포인터로 쓰레기값 출력하는 걸 만들었는데요.
게시물ID : programmer_14254짧은주소 복사하기
작성자 : 리이사
추천 : 0
조회수 : 688회
댓글수 : 4개
등록시간 : 2015/11/04 01:39:11
옵션
  • 본인삭제금지



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에서 오류나고...
왜 이런건가요? 제가 다른프로그램이 사용중이 메모리에 접근할려고 해서 그런건가요?
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호