본문 바로가기
컴퓨터 사이언스/C언어

[C언어] 포인터 사용시 주의해야할 점: 포인터 변수의 초기화

by 메리뉴데이 2020. 8. 10.
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(void) {
 
   int * ptr;   // ptr의 값이 초기화되지 않음
 
   * ptr = 123   // ptr이 가리키고 있는 곳에 123을 저장하려 함
 
   . . .
 
}
 
cs

 

!! 포인터 ptr의 값을 따로 초기화하지 않으면,

주소값이 저장되는 ptr에 쓰레기 값으로 초기화된다.

따라서 알 수 없는 곳에 123이라는 값이 저장될텐데,

그 알 수 없는 곳이 컴퓨터 메모리 상 중요한 부분일 수도 있으므로 이러한 소스코드는 매우 위험하다. 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(void) {
 
   int * ptr = 200;   // ptr의 값이 200으로 초기화 됨
   
   * ptr = 5;  // ptr이 가리키고 있는 곳에 5를 저장하려 함
 
   . . .
 
}
 
cs

 

!! 포인터 ptr의 값을 200으로 초기화하였는데,

이 역시도 200이라는 주소가 어떠한 곳인지 몰라 이 주소에 5라는 값을 저장한다면,

위와 마찬가지로 메모리상 중요한 부분에 값을 바꾸려고 하는 것일 수도 있으므로 이렇게 또한 하면 안된다.

 

 

 

그러면, 포인터 변수의 초기화는 어떻게 해야 하는가?

 

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
int main(void) {
 
   int * ptr1 = 0;   // 숫자 0은 주소 0번지를 의미하는 것이 아니라, 아무것도 가리키지 않는다는 의미
   
   int * ptr2 = NULL;   // 위의 행과 동일한 
   . . .
 
}
 
cs

 

포인터를 초기화할 때에는 내가 알고 있는 특정 주소값으로 할 때가 아니면,

위와 같이 널 포인터로 초기화하는 것이 안전한 방법이다.