인프런 커뮤니티 질문&답변

정인식님의 프로필 이미지
정인식

작성한 질문수

홍정모의 따라하며 배우는 C언어

9.18 포인터형 매개변수

swap 함수 작성하기

해결된 질문

작성

·

262

1

홍 선생님께선 swap 함수에서 temp를 선언하실 때 정수형 자료형으로 선언하셨는데 저는 정수형 포인터 변수로 선언하고자 했어요.

void swap(int* a, int* b)

{

int* temp = NULL;

*temp = *a;

*a = *b;

*b = *temp;

}

이렇게 함수를 작성해서 코드를 실행하려고 하는데 빌드는 성공했지만 실행은 실패했어요.

다만 함수를 아래처럼 고치면 정상적으로 작동하더군요.

void swap(int* a, int* b)

{

int c;

int* temp = &c;

*temp = *a;

*a = *b;

*b = *temp;

}

혹시 첫 번째 코드에서 temp 변수의 주소를 NULL로 초기화 한 부분이 문제였을까요?

답변 1

2

안녕하세요, 답변 도우미 Soobak 입니다.

 

네, 맞습니다.

포인터 변수를 NULL 값으로 초기화했을 때, NULL 포인터는 메모리의 유효하지 않은 영역을 가리키고 있기 때문에, 해당 포인터를 역참조하려고 하면 프로그램이 비정상적으로 종료됩니다.

즉, int* temp = NULL; 으로 초기화 선언 뒤, *temp = *a; 을 수행하려고 할 때 temp 가 유효하지 않은 영역을 가리키고 있으므로 오류가 발생하게 됩니다.

정인식님의 프로필 이미지
정인식
질문자

명쾌한 설명 감사합니다!

정인식님의 프로필 이미지
정인식

작성한 질문수

질문하기