본문 바로가기
프로그래밍/C 언어(정리)

C언어] 동적 배열

by 곰나나 2023. 12. 30.

[동적 배열]

1. 동적 배열?
배열의 연속된 메모리 공간이라는 특성 때문에  선언한 크기 이상의 요소를 추가할 수 없다.

실행 중에 필요한 만큼 크기를 늘렸다 줄였다 할 수 있는 배열을 동적 배열이라고 한다.

동적 배열을 만드는 기본 원리는 최초 적당한 길이로 초기 할당하되 삽입되는 정보가 할당된 메모리양을 초과할 때 배열의 크기를 더 늘리는 것이다.

malloc, realloc, free 함수를 사용하여 동적 배열을 다룰 수 있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
    int* dynamicArray = NULL;
    int newSize = 5;
 
    //& 동적 배열 할당
    dynamicArray = (int*)malloc(newSize * sizeof(int));
    if (dynamicArray == NULL)
    {
        fprintf(stderr, "메모리 할당 실패\n");
        return 1;
    }
 
    //& 초기 값 설정
    for (int i = 0; i < newSize; ++i)
    {
        dynamicArray[i] = i + 1;
    }
 
    //& 배열의 끝에 요소 추가
    int insertValue = 10;
    dynamicArray = (int*)realloc(dynamicArray, (newSize + 1* sizeof(int));
    if (dynamicArray == NULL)
    {
        fprintf(stderr, "메모리 재할당 실패\n");
        free(dynamicArray);
        return 1;
    }
    dynamicArray[newSize] = insertValue;
    newSize++;
 
    //& 배열에서 특정 위치의 요소 삭제
    int indexToDelete = 3;
    memmove(dynamicArray + indexToDelete, dynamicArray + indexToDelete + 1, (newSize - indexToDelete - 1* sizeof(int));
    newSize--;
 
    //& 모든 요소 출력
    for (int i = 0; i < newSize; ++i)
    {
        printf("%d ", dynamicArray[i]);
    }
 
    //& 동적 배열 해제
    free(dynamicArray);
 
    return 0;
}// main
cs

 

malloc 함수를 사용하여 초기 동적 배열을 할당하고, realloc 함수를 사용하여 배열 크기를 조절한다. 마지막에는 free 함수를 사용하여 동적으로 할당된 메모리를 해제. realloc 함수를 사용할 때는 새로운 크기로 재할당할 때마다 기존 메모리의 내용이 유지되므로 데이터의 손실을 방지할 수 있다.

728x90