[C언어] : 변수 초기화와 쓰레기 값 발생

728x90

 

자바같은 경우는 변수를 스스로 초기화 시키지 않아도 지가 알아서 0으로 초기화 시키기 때문에 상관없지만, c언어에서는 변수 선언과 함께 그 전에 메모리에 있던 아무 의미 없는 쓰레기 값이 딸려 나올 수 있다.

 

변수 선언 시에 할당 받은 메모리 공간을 그 전에 다른 프로그램에서 사용하고 있었다면, 그 프로그램이 종료되었더라도 실제 메모리에 저장되었던 데이터가 남아 있기 때문에 변수를 초기화 하지 않으면 이런 현상이 발생한다고 한다.

 

백준 문제를 예로 들면 이와 같다.

https://www.acmicpc.net/problem/1546

 

1546번: 평균

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보

www.acmicpc.net

[처음 작성한 코드]

#include <stdio.h>
int main(void){
   	double num, max, sum, input[1000]; 
    scanf("%lf",&num);
    for(int i=0; i<num; i++){
        scanf("%lf",&input[i]);
        if(input[i]>max)    
            max=input[i];
            printf("%d",max); // max값 확인을 위한 코드
    }
    for(int j=0; j<num; j++){
        input[j]=input[j]/max*100;
        sum+=input[j];
    }
    printf("%.2lf\n",sum/num);
    return 0;
}

printf("%d",max); 에서는 처음에 입력 받은 과목들의 최고 점수를 출력하도록 한다.

 

그러나 이 코드를 실행시켜서 입력값으로 60 70 80을 넣으면 max 값이 뜬금없이 4654981616으로 나타나는 것을 확인할 수 있었다.

이러한 쓰레기 값을 방지하기 위해 C에서는 변수를 처음 선언할 때 초기값을 정해줘야 한다.

 

[수정한 코드]

#include <stdio.h>
int main(void){
    double num=0, max=0, sum=0; 	// 수정
	double input[1000]; 		
    scanf("%lf",&num);
    for(int i=0; i<num; i++){
        scanf("%lf",&input[i]);
        if(input[i]>max)    
            max=input[i];  
    }
    for(int j=0; j<num; j++){
        input[j]=input[j]/max*100;
        sum+=input[j];
    }
    printf("%.2lf\n",sum/num);
    return 0;
}

정상적으로 값이 나타난다.

728x90