해결된 질문
작성
·
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
가 유효하지 않은 영역을 가리키고 있으므로 오류가 발생하게 됩니다.
명쾌한 설명 감사합니다!