C 언어 메모리 재할당 realloc() 함수, 초기화 함수 memset() 함수

입력받는 count 변수의 크기가 이전 count보다 값이 크면 배열의 메모리를
count 변수의 크기로 재할당하는 방식의 코드


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


int main()
{
        int count = 0;
        int previousCnt = -1000000000;
        int* dynamicIntegerArray = NULL;
        int* reallocArray = NULL;
        int temp = 0;
        do
        {
                printf("원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?");
                scanf("%u", &count);
                if(count > 0)
                {
                        if(count > previousCnt)
                        {
                                if( NULL == dynamicIntegerArray )
                                {
                                        dynamicIntegerArray = (int*) malloc(sizeof(int)*count);
                                        memset(dynamicIntegerArray, 0 , sizeof(int) * count);
                                        for(int i = 0; i< count; i++)
                                        {
                                                printf("%d 번째 원소의 값은 ? ",i);
                                                scanf("%u", &temp);
                                                dynamicIntegerArray[i] = temp;
                                        }
                                        for(int i = 0; i< count; i++)
                                        {
                                                printf("[%d] %d\n",i,dynamicIntegerArray[i]);
                                        }
                                }
                                else
                                {
                                        reallocArray = (int*) realloc(dynamicIntegerArray, sizeof(int) * count);
                                        if(NULL != reallocArray)
                                        {
                                                dynamicIntegerArray = reallocArray;
                                        }
                                        for(int i =0; i< count; i++)
                                        {
                                                printf("%d 번째 원소의 값은 ? ",i);
                                                scanf("%u", &temp);
                                                dynamicIntegerArray[i] = temp;
                                        }
                                        for(int i = 0; i< count; i++)
                                        {
                                                printf("[%d] %d\n", i, dynamicIntegerArray[i]);
                                        }
                                }
                                previousCnt = count;
                        }
                        else
                        {
                                printf("%d보다 커야 합니다.\n", previousCnt);
                        }
                }
        }while(count > 0 );
        if ( NULL != dynamicIntegerArray ) free(dynamicIntegerArray);
        return 0;
}




실행시 :
ndgndg91@LAPTOP-CCFK7MKV:~$ ./practice5
원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?3
0 번째 원소의 값은 ? 1
1 번째 원소의 값은 ? 2
2 번째 원소의 값은 ? 3
[0] 1
[1] 2
[2] 3
원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?2
3보다 커야 합니다.
원소의 개수는 ? (0 이하 값을 입력하면 종료됩니다) ?5
0 번째 원소의 값은 ? 1
1 번째 원소의 값은 ? 2
2 번째 원소의 값은 ? 3
3 번째 원소의 값은 ? 4
4 번째 원소의 값은 ? 5
[0] 1
[1] 2
[2] 3
[3] 4
[4] 5
원소의 개수는 ? (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 네 번째