• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

swap 함수 작성하기

23.12.14 23:04 작성 조회수 149

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님의 프로필

Soobak

2023.12.15

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

 

네, 맞습니다.

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

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

정인식님의 프로필

정인식

질문자

2023.12.17

명쾌한 설명 감사합니다!