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언어