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