1.  C    

 

 프로그래밍을 하다보면 동적으로 메모리를 할당해 배열을 생성해야하는 경우가 발생한다. C에서는 그 역할을 malloc 함수가 한다. 이 함수는 memory allocation 의 약자이며 <stdlib.h> 라이브러리에 정의되어 있기 때문에 먼저, 선언하는 작업이 필요하다.  

 

또한, 이 함수는 인자로 전달된 크기의 바이트 수 만큼 메모리 공간을 할당한다. 입력한 n개인 int 형 배열을 만들기 위해서는 int 의 크기 * n이 된다. 이 때, int 타입의 크기를 정확하게 알기 위해서 sizeof 키워드를 사용한다.

 

 주의할 점이 있는데 이 함수는 자신이 할당한 메모리의 시작 주소를 리턴한다. 이 때, 리턴형이 (void *) 형이므로 (int *) 형으로 형변환 하는 작업을 해야한다.  

 

 그리고 초기화 하는 방법으로 순회(for)를 돌아 값을 넣어주거나 <string.h> 라이브러리의 memset 함수를 사용한다. 이 함수는 어떤 메모리의 시작점부터 연속된 범위를 특정 값으로 지정하고 싶을 때 사용하는 함수이다. 첫 번째 인자로는 메모리의 시작점, 두 번째 인자로는 채우고자 하는 특정 값, 세 번째로는 채우고자 하는 메모리의 크기(바이트 수)가 들어간다. 

 

1. C에서의 동적배열

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

int n;
scanf("%d", &n);
int *arr = (int *)malloc(sizeof(int) * n);
memset(arr, 0, n * sizeof(int));

free(arr);

 

동적인 배열을 다 사용하면 메모리를 다시 돌려주어야 하는데 이것은 free 함수가 한다. 이 함수는 메모리 누수를 방지하는 역할을 한다.   

 

 

   2. C++   

 

C에서는 malloc과  free 함수를 통해서 메모리를 할당하고 해제하였는데 C++에서는 new와 delete라는 연산자를 활용하여 메모리를 관리한다. new는 malloc() 함수와 달리 메모리 크기를 정하지 않고 동적으로 할당한다.

 

2. C++에서의 동적배열

#include <iostream>

int n;
cin >> n;
int *arr = new int[n];

delete[] arr;