C Programming

C언어 2차원 동적 메모리 할당 - 공부하는 도비

DOVISH WISDOM 2022. 11. 6. 21:46  
728x90
반응형

오늘은 2차원 배열을 선언하는 것처럼,2차원 동적 메모리 할당에 대해 알아보겠습니다.

지난 피드에서 C언어 동적 메모리 할당을 알아보았습니다. 

자세한 내용은 아래 링크를 참고해주세요.

2022.11.06 - [C언어] - [C언어] 동적 메모리 할당을 통해 배열처럼 사용하기(mallloc(), calloc()) - 공부하는 도비

 

[C언어] 동적 메모리 할당을 통해 배열처럼 사용하기(mallloc(), calloc()) - 공부하는 도비

동적 메모리 할당 (Dynamic Memory Allocation) 프로그램 실행 도중 필요한 만큼 힙(heap) 영역의 메모리를 할당 받아 사용하는 방식입니다. 동적 메모리 할당시에는 malloc() 함수와 calloc() 함수가 있는데,

yang-wistory1009.tistory.com

동적 메모리 할당을 아래 코드처럼 간단히 할 수 있습니다. 

 

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int *arr;   
    arr = (int *)malloc(sizeof(int) * 3);

    return 0;    
}


그럼 2차원 배열로 할당받고 싶을 땐 어떻게 해야 할까요? 

2차원 배열을 할당받는 방법은, malloc() 함수를 여러 번 호출하는 것입니다.

이중 포인터로 arr을 선언해주고,

각 포인터에 새로운 메모리를 동적으로 할당해줍니다.

(n × n) 배열을 할당받길 원하면, 아래 코드처럼 쓰시면 됩니다.

#include <stdio.h>
#include <stdlib.h>

int main(void) 
{
	int n;
    int **arr;
    scanf("%d", &n);
    
    arr = (int**)malloc(sizeof(int*) * n );
    
    for(int i = 0; i < n; i++)
    {
        arr[i] = (int*)malloc(sizeof(int) * n);
    }
    
    return 0;
}

 

메모리 해제 방법은, for문으로 할당 받았기 때문에 똑같이 for문을 사용하여 해제해야 합니다.

	for(int i=0; i < n; i++)
	{
        free(arr[i]);   
    }
    free(arr);