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

Spring Boot Actuator readiness, liveness probes on k8s

About idempotent

About ZGC

About G1 GC

sneak peek jitpack

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

HackerRank Java Between Two Sets

Java - HashMap (feat. LinkedList, Tree.. maybe Later)