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 |
포인터를 초기화할 때에는 내가 알고 있는 특정 주소값으로 할 때가 아니면,
위와 같이 널 포인터로 초기화하는 것이 안전한 방법이다.
'컴퓨터 사이언스 > C언어' 카테고리의 다른 글
[C 언어] 배열에 관해서: 배열명 =포인터 (0) | 2020.08.10 |
---|---|
[C언어]포인터 VS 배열에 대하여: 변수 VS 상수 (0) | 2020.08.10 |
[C언어] 포인터가 가리키는 메모리를 참조하는 * 연산자 예제 (0) | 2020.08.10 |
[C언어] & 연산자 (Ampersand, 앰퍼샌드) (0) | 2020.08.09 |
[C언어] 포인터 변수에 있어 자료형의 의미 2 (0) | 2020.08.09 |