|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3304 [복사]
제가 C언어 다시 보구있는 사이트에서 내놓은 문젠데 10개의 정수를 입력받아서 최댓값을 구하고, 큰 순서대로
출력하는 프로그램을 짜는 문제입니다. 나름 머리 굴려서 짜봤는데,,
#include <stdio.h>
#include "ed.h"
int *max(int *a);
void mm(int *a);
int main()
{
int a[10];
int b[10];
int i;
printf("0~9번째 까지의 숫자를 입력하세요\n");
for(i=0; i<10; i++)
{
scanf("%d", &a[i]);
}
printf("최댓값 : %d \n", *max(a));
for(i=0; i<10; i++)
{
b[i] = *max(a);
mm(&b[i]);
printf("%d\t", b[i]);
}
ed(1);
}
int *max(int *a)
{
int i;
int *max;
*max = 0;
*max = a[0];
for(i=0; i<10; i++)
{
if(*max<a[i])
*max = a[i];
}
return max;
}
void mm(int *a)
{
*a = -1010;
}
코드는 이렇습니다. 어떻게 할까 어떻게 할까 하다가 한번 최대값으로 정해진 변수엔 -1010 이란 숫자를 넣어서
다시 최댓값을 구할 때 순위에서 제외되게 해놨습니다. 음,, 먼저 이 프로그램을 실행해보면
0~9번째 까지의 숫자를 입력하세요, 하고 숫자 입력하는것까진 갑니다.
근데 그 다음엔 런타임 오류, 변수 max 값이 초기화 되지 않고 사용됐다고 나옵니다. 아까 자꾸 이게 떠서
포인터 변수인 max에 0을 대입해줬습니다. 그런데도 계속 이렇게 뜨네요, 그리고 무시하고 계속을 누르면
max의 주소값인 0xccccccc 위치를 기록하는 동안 엑세스 위반이 발생했다고 나오네요
왜이런걸까요? 열라 고생해서 짠건데ㅜ |
Hit : 7746 Date : 2012/02/14 03:07
|