포인터 변수 사용시 주의사항

  • 포인터 변수는 임의의 메모리 주소가 가진 값을 변경할 수 있으므로 주의해야 한다.
  • 따라서 포인터 변수를 사용할 때는 적절한 초기화를 해야한다.
1
2
3
4
5
6
7
void pointer_overflow(){
  int *p;
  *p = 10;
  printf("*p : %d", *p);
  printf("p  : %p", p);
  printf("&p : %p", &p);
}
1
2
3
*p : 10
p  : 100000
&p : 0x42ace3241
1
2
3
| variable |     address     |  value  |
|          |   0x0000186A0   |  10     |
|     p    |   0x42ace3241   |  100000 |
  • 위 예시에서는 포인터가 가리키는 메모리 주소값을 초기화하지 않은채 메모리에 값을 할당했다.
  • 이 경우, 포인터가 가리키는 메모리 주소값은 쓰레기값이 할당된다.
  • 따라서, 어딘지 모를 메모리 주소에 저장된 값을 변경시켜버릴 수 있는 것이다.
  • 미사용중인 메모리 공간이라면 다행이지만, 사용중인 메모리 공간의 값을 변경해버리면 심각한 오류가 발생할 수 있다.

Reference

C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)

Comments