이중 포인터 변수를 활용하는 문제를 풀던중 의문이 들었어요!!
조회수 796회
#include<stdio.h>
void MaxAndMin(int * arr,int size,int **mxptr,int **mnptr)
{
int * max,* min;
int i;
*max=*min=arr[0];
for(i=0;i<size;i++)
{
if(*max<arr[i])
*max=arr[i];
if(*min>arr[i])
*min=arr[i];
}
*mxptr=max;
*mnptr=min;
}
int main(void)
{
int *maxPtr;
int *minPtr;
int arr[5];
int i;
for(i=0;i<sizeof(arr)/sizeof(int);i++)
{
printf("정수 입력 %d:",i+1);
scanf("%d",&arr[i]);
}
MaxAndMin(arr,sizeof(arr)/sizeof(int),&maxPtr,&minPtr);
printf("%d %d",*maxPtr,*minPtr);
return 0;
}
여기에 있는 코드와
#include<stdio.h>
void MaxAndMin(int * arr,int size,int **mxptr,int **mnptr)
{
int * max,* min;
int i;
max=min=&arr[0];
for(i=0;i<size;i++)
{
if(*max<arr[i])
max=&arr[i];
if(*min>arr[i])
min=&arr[i];
}
*mxptr=max;
*mnptr=min;
}
int main(void)
{
int *maxPtr;
int *minPtr;
int arr[5];
int i;
for(i=0;i<sizeof(arr)/sizeof(int);i++)
{
printf("정수 입력 %d:",i+1);
scanf("%d",&arr[i]);
}
MaxAndMin(arr,sizeof(arr)/sizeof(int),&maxPtr,&minPtr);
printf("%d %d",*maxPtr,*minPtr);
return 0;
}
여기에 있는 코드의 차이점은 MaxAndMin함수에서 for문에서 *min과 min을 각각 사용했다는건데요 위의 코드는 딱히 큰 문제는 없어보이는데 실행이 되지 않고 밑에것은 정상적으로 작동하는데 위의 것은 작동이 되지 않는 이유를 알고 싶어요!!(참고로 코드는 정수 5개를 입력받아 최댓값 최솟값을 찾는 코드입니다. 다른 방법들은 저도 많이 알고 있으니 이 방법에서 틀린부분만 찾아주시면 감사하겠습니다.)
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
위의 코드에서
max
와min
은 주소값을 가리키는 포인터 변수인데 어떤 변수의 주소도 할당 되어있지 않습니다. 따라서 해당 포인터 변수가 가리키는 변수에arr[0]
을 할당하는 것은max
와min
이NULL
로 초기화되어있다는 전제하에 당연히 엑세스 위반 에러가 발생할 수 밖에 없습니다.-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력