CAPS 위키 : 동적할당

동적할당 #동적 할당 [ 수정 내역 ] [ 수정 ]

최근 수정:

목차

1. 개요

2. 사용법

2.1. 예시

2.2. 실례

1. 개요

런타임에 변수 등의 공간을 할당하는 행위를 뜻함.

런타임에 사용자가 직접 할당한다는 말은 메모리구조의 힙 영역에 저장되며,

사용자가 공간을 직접 반환시키기 전까지는 남아있다는 특성 때문에 자주 이용된다.

2. 사용법

할당: (TYPE_p)malloc(p)

반환:free(p),

표준라이브러리 함수로, stdlib.h를 쓴다.

할당:new

반환:delete

기본 연산자로, 외부 헤더를 필요로 하지 않는다.

2.1. 예시

런타임에 4개의 원소를 가지는 int형 배열을 만들 경우.

int *p;

p = (int* p)malloc(sizeof(int)*4);

free(p);

int * p;

p = new int [4];

delete[] p;

2.2. 실례

자주 쓰이는 실제 예시로는, 1.사용자 정의 함수에서 특정한 값을 만들고 보존할 필요가 있는경우. 2. 실행시간에 배열의 크기를 결정해야 하는 경우이다.

즉, 연결 리스트에서, insert함수로 노드를 만든 후, 노드를 단순히 생성하고, 값을넣고, 주소값을 반환하기만 하면

생성된 노드는 스택에 저장되므로 함수가 반환될 때 노드도 같이 반환되어 주소값은 쓰레기값을 가리키게 된다.

이 때, 힙 영역을 사용하는 동적할당 명령을 쓰면 함수가 반환되더라도 free()를 만나기 전까지는 계속 남아 main()함수에서도

반환된 주소값을 쓸 수 있다.

또한 변수로 배열의 크기를 지정하고 싶을 때, 일반적으로 int arr[var];처럼 사용하면 컴파일 타임에 공간이 할당되는 변수의 특성으로 인해

컴파일 타임에 배열의 크기가 지정되지 못하고 컴파일 오류를 발생시킨다. 공간할당은 컴파일 타임에 하고 값의 대입은 런타임에 하기 때문인데,

이를 해결하기 위해선 런타임에 배열의 크기를 지정하는것, 즉, 동적할당을 사용해서 위 처럼 쓰면 된다.

본인의 컴퓨터가 터지는 것을 확인하고 싶다면 free나 delete를 하지 말고 계속해서 동적할당을 해보자