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

댓글

이 블로그의 인기 게시물

Spring Boot Actuator readiness, liveness probes on k8s

About Kafka Basic

sneak peek jitpack

About idempotent

About G1 GC

About ZGC

About JVM Warm up

Java 학생관리 프로그램

HackerRank Java Between Two Sets

erwin DM 으로 Oracle 연결 할 때 뜨는 에러들 해결