C언어 - NULL 포인터와 런타임 에러
2020. 11. 11. 13:11ㆍ개인공부/C언어
int main() {
int a = 1234; // 메모리에 공간을 가지게 되면서 object가 된다.
//printf("%p\n", &a);
//printf("%d\n", a);
int* ptr = &a; // 포인터변수를 초기화 안해주면 쓰레기값을 가지고 메모리 공간을 차지한다.
printf("%p\n", ptr);
printf("%d\n", *ptr);
}
결과값
000000017FCFFA34
1234
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int* ptr = 1234; // 포인터변수를 초기화 안해주면 쓰레기값을 가지고 메모리 공간을 차지한다.
// *ptr이 가리키는 주소값 1234로 가려고 하니 지정된게 없다.
// 고로 컴파일 에러가 난다. 근본없는 주소다.
printf("%p\n", ptr);
printf("%d\n", *ptr);
}
컴파일 에러
*ptr에 1234를 넣는건 문제가 없다.
하지만 redirection(역참조) 하는 과정에서 문제가 생긴것이다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int* safer_ptr = NULL; // null값을 넣는이유는 사용여부판단위해;
int a = 123;
//safer_ptr = &a;
int b;
scanf("%d", &b);
if (b % 2 == 0) // 조건에 따라서
safer_ptr = &a; // 포인터의 주소가 대입될수 있고 안될수도있다.
// 될지 안될지 런타임에 결정되는 경우가 있다.
// 그래서 포인터를 선언함과 동시에 null로 초기화 한다.
if (safer_ptr != NULL)
printf("%p\n", safer_ptr);
if (safer_ptr != NULL)
printf("%d\n", *safer_ptr);
return 0;
}
출처 : 홍정모의 따라배우는 C언어
'개인공부 > C언어' 카테고리의 다른 글
C언어 - 배열의 기본적인 사용방법 (0) | 2020.11.11 |
---|---|
C언어 - 배열과 메모리 (0) | 2020.11.11 |
C언어 - 포인터의 기본적인 사용 방법 (0) | 2020.11.11 |
C언어 : 포인터의 작동원리 (0) | 2020.11.11 |
C언어 - 헤더파일 만들기 (0) | 2020.11.11 |