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 Kafka Basic

About JVM Warm up

About idempotent

About G1 GC

About ZGC

Spring Boot Actuator readiness, liveness probes on k8s

sneak peek jitpack

Optimistic Concurrency Control VS Pessimistic Concurrency Control - What should i choose?

DDD(Domain Driven Design) - Aggregate (어그리게잇)

Strategy Pattern In Spring (feat. JPA)