늘 겸손하게

이차원 배열 동적할당 ( C / C++ ) 본문

Programming/C & C++

이차원 배열 동적할당 ( C / C++ )

besforyou999 2021. 7. 16. 12:28

이차원 배열을 동적 할당해보자

 

동적 할당을 위해서 malloc이 필요하다.

 

#include <stdlib.h> 혹은 #include <iostream>을 추가하여 malloc을 사용 가능하도록 한다.

 

 

 

1. 배열을 저장할 배열을 생성

 

1
2
3
4
5
6
7
int** arr;
 
int a, b;
 
cin >> a >> b;    
 
arr = (int**)malloc(sizeof(int** (a));
cs

 

a, b는 사용자로부터 입력받는 숫자로 a는 배열의 개수, b는 배열의 원소 개수로 가정한다.

 

더블 포인터 arr를 선언하고 입력받은 정수 값 a를 이용하여 a개의 배열 주소 값들을 저장할 배열을

 

malloc으로 이용하여 생성하고 생성한 배열의 주소 값을 포인터 arr에 할당한다.

 

( sizeof(int*) * a ) 값만큼의 크기를 생성한 이유는 a개의 배열 주소 값만 저장하면 되기 때문.

 

(int**)로 캐스팅하여 더블 포인터임을 알린다.

 

 

 

 

2. 원소의 개수가 b개인 배열을 a개 생성하고 생성한 배열의 주소 값을 arr의 원소로 저장

 

1
2
3
for (int i = 0; i < a; i++
    arr[i] = (int*)malloc(sizeof(int* b);
    
cs

 

 

arr 배열의 각 원소 값은 생성한 배열의 주소 값이다.

 

생성한 이차원 배열은 자유롭게 사용 가능하고

 

행렬 데이터를 저장할 때 매우 유용하다

 

 

 

 

3. 할당한 데이터의 할당 해제

 

동적 할당한 데이터는 할당 해제를 해주어야 메모리 누수가 발생하지 않는다.

 

메모리 누수란 더 이상 사용하지 않는 데이터를 프로그램이 계속 점유하는 것을 말한다.

 

메모리 누수가 조금 발생하는 것이 큰 문제는 아니지만 메모리 누수가 누적되다가

 

누수된 메모리량이 너무 많아지면 버그가 생기기는 원인이 되거나 심한 경우에는 프로그램이

 

더 이상 사용 가능한 메모리가 부족해져 결국 작동이 중지되는(죽어버리는) 일이 발생할 수도 있다. 

 

동적 할당한 데이터의 할당 해제는 free 함수를 이용한다.

 

 

1
2
3
4
5
for (int i = 0; i < a; i++
    free(arr[i]);    
 
free(arr);
 
cs

 

 

arr 배열의 각 원소 값으로 저장된 배열의 주소 값들을 할당 해제 함수인 free 의 인자로 주어

 

할당해제 작업을 수행

 

 

더블 포인터 arr에 저장된 배열 할당 해제