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 JVM Warm up

About idempotent

About Kafka Basic

About ZGC

sneak peek jitpack

Spring Boot Actuator readiness, liveness probes on k8s

About Websocket minimize data size and data transfer cost on cloud

About G1 GC

대학생 코딩 과제 대행 java, python, oracle 네 번째