프로그래밍

 3198, 1/160 회원가입  로그인  
   rocket07
   http://--
   C언어, 숫자가 큰 순서대로 나열하는 프로그램 코드 (좀봐주셔요)

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



    
supershop max 함수의 max 변수(이런식으로 이름짓는 건 좋지 않은 코딩 습관입니다)가 포인터인데 가리키는 값이 뭔질 모르네요. 런타임 에러가 나겠지요. max 변수가 포인터일 이유는 없습니다. 그냥 int로 쓰세요. 2012/02/14  
rocket07 supershop // 충고감사합니다
2012/02/14