포인터 변수 사용시 주의사항
- 포인터 변수는 임의의 메모리 주소가 가진 값을 변경할 수 있으므로 주의해야 한다.
- 따라서 포인터 변수를 사용할 때는 적절한 초기화를 해야한다.
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