이중 포인터 변수를 활용하는 문제를 풀던중 의문이 들었어요!!

조회수 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 답변

  • 위의 코드에서 maxmin은 주소값을 가리키는 포인터 변수인데 어떤 변수의 주소도 할당 되어있지 않습니다. 따라서 해당 포인터 변수가 가리키는 변수에 arr[0]을 할당하는 것은 maxminNULL로 초기화되어있다는 전제하에 당연히 엑세스 위반 에러가 발생할 수 밖에 없습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)