C 프로그래밍에서 데이터를 구조화하고 효율적으로 관리하는 데 필수적인 기술인 다차원 배열과 동적 메모리 할당에 대해 알아보겠습니다. 복잡한 데이터 구조와 대규모 데이터 셋을 다루는 데 있어 이 두 개념은 매우 중요합니다.
다차원 배열의 기초
다차원 배열은 데이터를 행렬이나 테이블 형태로 저장할 수 있게 해주며, 특히 과학 계산, 이미지 처리, 정보 저장 등 다양한 분야에서 활용됩니다.
- 정적 다차원 배열 선언하기: C에서는 다음과 같이 2차원 배열을 선언할 수 있습니다.
1
2
3
4
5
6
|
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
|
cs |
이 배열은 3행 4열의 행렬을 형성합니다.
- 다차원 배열 요소에 접근하기: 배열의 요소에 접근할 때는 다음과 같이 인덱스를 사용합니다.
1
2
|
printf(“%d”, matrix[0][1]); // 출력: 2
|
cs |
동적 메모리 할당의 이해
프로그램 실행 중에 메모리의 크기를 결정할 수 있는 동적 메모리 할당은 유연한 데이터 구조를 가능하게 합니다.
malloc
과calloc
함수 사용법:malloc
함수는 주어진 크기의 메모리 블록을 할당하고,calloc
은 메모리를 할당하고 0으로 초기화합니다.
1
2
3
|
int *array = (int *)malloc(10 * sizeof(int)); // 10개의 정수를 위한 메모리 할당
int *array = (int *)calloc(10, sizeof(int)); // 10개의 정수를 위한 메모리 할당 및 초기화
|
cs |
메모리 해제하기: 동적으로 할당된 메모리는 free
함수를 사용하여 해제해야 합니다.
1
2
|
free(array);
|
cs |
동적으로 다차원 배열 할당하기
다차원 배열을 동적으로 할당하기 위해서는 포인터의 배열을 사용하거나 포인터에 대한 포인터를 사용해야 합니다.
- 2차원 배열 동적 할당 예제:
1234int **matrix = (int **)malloc(rows * sizeof(int *));for(int i = 0; i < rows; i++)matrix[i] = (int *)malloc(cols * sizeof(int));cs
이 방법을 사용하면, 각 행마다 메모리가 할당되어 ‘가변 길이 배열’을 구현할 수 있습니다.
메모리 누수 방지
동적 메모리 할당의 주요 문제 중 하나는 메모리 누수입니다. 할당된 메모리를 해제하지 않으면 프로그램의 메모리 사용량이 계속 증가하여 성능 문제나 시스템의 메모리 부족을 초래할 수 있습니다.