C 언어 메모리 동적할당 malloc() 함수 메모리해제 free() 함수를 활용

0을 입력하기 전까지 계속해서 학생 수를 받고
학생 당 점수를 입력받아 배열을 관리하며
입력이 끝나면 총점과 평균점수를 출력해주는 코드이다.

#include <stdio.h>
#include <stdlib.h>

void getCountInput(int* count){
        printf("학생 수는 ?(0 이하의 수를 입력하면 종료됩니다 :  ");
        scanf("%u",count);
}
void getScoresInput(int* array, int c)
{
        signed int temp = 0;
        for(int i =0; i<c; i++){
                printf("%d 번째 학생의 점수는 ? ",i+1);
                scanf("%u",&temp);
                *(array + i ) = temp;
        }
}
void getSumAndAvg(int* array, int c, int* sum, double* avg)
{
        for(int i =0; i< c; i++){
                *sum += *(array + i);
        }
        if( 0 != c)
        {
                *avg = *sum / c;
        }
        else
        {
                printf("총점수 합계나 학생 수가 0입니다.");
        }
}
void truncateVariables(int* array, int* sum, double* avg)
{
        free(array);
        *sum = 0;
        *avg = 0;
}
int main()
{
        int count = 1;
        int* dynamicArrayScores = NULL;
        double avg = 0;
        int sum = 0;
        do
        {
                        getCountInput(&count);
                        if(count <= 0 ){
                                printf("0 이하를 입력하셨기 때문에 프로그램을 종료합니다.\n");
                                return 0;
                        }else{
                                printf("학생 수  : %d\n",count);
                        }
                        dynamicArrayScores = (int*) malloc(sizeof(int)*count);
                        getScoresInput(dynamicArrayScores, count);
                        getSumAndAvg(dynamicArrayScores, count, &sum, &avg);
                        printf("총점은 %d 입니다.\n",sum);
                        printf("평균 점수는 %.6f 입니다.\n",avg);
                        printf("다시 회원수를 입력하세요.\n");
                        truncateVariables(dynamicArrayScores, &sum, &avg);
        }
        while(count > 0);
        if(dynamicArrayScores != NULL){
                printf("메모리 해제가 되지 않아서 dynamicArrayScores메모리를 해제 합니다!\n");
                free(dynamicArrayScores);
        }
        return 0;
}




실행시 :
ndgndg91@LAPTOP-CCFK7MKV:~$ ./practice4
학생 수는 ?(0 이하의 수를 입력하면 종료됩니다 :  3
학생 수  : 3
1 번째 학생의 점수는 ? 100
2 번째 학생의 점수는 ? 90
3 번째 학생의 점수는 ? 75
총점은 265 입니다.
평균 점수는 88.000000 입니다.
다시 회원수를 입력하세요.
학생 수는 ?(0 이하의 수를 입력하면 종료됩니다 :  0
0 이하를 입력하셨기 때문에 프로그램을 종료합니다.

댓글

이 블로그의 인기 게시물

About Kafka Basic

About JVM Warm up

About ZGC

Spring Boot Actuator readiness, liveness probes on k8s

About G1 GC

sneak peek jitpack

About idempotent

C 언어 구조체의 포인터 멤버 변수

Synology NAS에 MariaDB 10에 Mysql workbench로 원격접속하기

About Websocket minimize data size and data transfer cost on cloud