열혈강의 17-1문제 입니다.
쇼코홀릭
열혈강의 연습문제 17-1입니다.
컴파일하고 build까지 에러 없이 다 잘되는데 실행하면 응용 프로그램 오류 창이 뜨면서 에러가 나네요.
어디가 잘못됐는지 감이 안잡히네요..답변 부탁드릴께요.
문제는 아래와 같습니다.
두 개의 int형 포인터와 길이가 5인 int형 배열을 선언한 다음, 총 5개의 정수를 사용자로부터 입력 받는다.
그리고 나서 두 개의 포인터와 배열을 함수 MaxMin의 인자로 전달한다. 함수 호출이 완료되고 나면 max와 min은 배열의 최대 값과 최소값을 가리키고 있어야 한다.
이러한 기능을 지니는 함수 MaxMin을 정의하고, 이에 적절한 main 함수도 구현해 보자. main 함수의 마지막에는 포인터 max와 min이 가리키는 메모리가 지니고 있는 값을 출력하기로 하자.
#include stdio.h
void MaxMin(int* pArr, int size, int** mx, int** mn);
int main(void)
{
int arr[5];
int *max, *min;
int i;
for(i=0; i5; i++)
{
printf(정수 입력: );
scanf(%d, &arr[i]);
}
MaxMin(arr, sizeof(arr)/sizeof(int), &max, &min);
printf(최대: %d, 최소: %d \n, *max, *min);
return 0;
}
void MaxMin(int* pArr, int size, int** mx, int** mn)
{
int i;
int max=pArr[0];// 최대 값을 배열의 첫번째 값으로 초기화
int min=pArr[0];// 최소 값을 배열의 첫번째 값으로 초기화
for(i=0; isize; i++)
{
if(maxpArr[i])
{
max=pArr[i];
*mx=&pArr[i];
}
if(minpArr[i])
{
min=pArr[i];
*mn=&pArr[i];
}
}
}
-
엘핀
size의 값은 정상적으로 5가 출력되는 군요. 제 컴파일러에 문제가 있는걸까요. 왜 안돼는지 모르겠네요. 휴~
수다님, 루트 님, 수다님 모두 감사합니다. 즐거운 저녁 되세요.^^ -
곰돌곰돌
아무 문제 없이 동작하는 군요.
VS2005에서 테스트했습니다.
디버그 모드로 MaxMin()함수 내부 첫 for문에 break point를 잡고 돌려보세요. size의 값이 얼마인지. 혹시 sizeof(arr)에서 arr을 int[5]가 아니라 int*로 보았다면 size의 값이 1이 될 수도 있고, 그에 따라 max와 min변수는 초기화되지 않은채 값을 출력해야할 수도 있습니다. -
라임나무
루트 // 저는 mx와 mn이 가리키는 포인터 max와 min에 pArr[i]번째 요소의 주소 값을 저장하려는 의도로 저렇게 작성했는데 잘못된 코드인가요? 가르쳐 주세요.
-
Sona
*mx=&pArr[i];
*mn=&pArr[i];
이 부분에서 문제가 있으려나; -
가을빛
로첸// 말씀하시는 의도를 잘 모르겠습니다. 쉽게 좀...^^;