728x90

동적으로 메모리 할당에 new를 사용하려면 이중포인터를 사용해야 한다.

 

이중 포인터는 포인터 연산자 *를 두 번 씀으로써 사용이 가능하다. 삼중 포인터라면 *를 세 개 붙이면 된다. 이제 여기에 동적할당을 할 차례이다. 동적할당은 가운데 있는 50칸짜리 공간을 할당한 후, 반복문을 이용해서 50칸에 각각 100칸짜리 공간을 할당하는 방식을 쓴다. 코드1은 50칸짜리 공간을 할당하는 코드이다.


char** text = new char*[50];

코드1. 이중 포인터를 이용한 배열의 동적할당 #1


코드1을 보면 text가 이중 포인터이기 때문에 new 연산자 오른쪽에 위치한 코드가 char[50]이 아닌 char*[50]으로 써있다. 이 부분에 주의하자. 그럼 50칸을 생성했으니 100칸을 생성해보자.


char** text = new char*[50];

for(int i = 0; i < 50; i++)
text[i] = new char[100];

코드2. 이중 포인터를 이용한 배열의 동적할당 #2


이 50개의 칸에 for문을 50번 돌리면서 100칸짜리 방을 만드는 것이다. 이렇게 할당이 끝났으면 text는 또 다시 완벽한 2차원 배열처럼 사용이 가능하다. 참고로 for문 내의 char[100]부분의 100이라는 숫자를 i에 따라 다르게 쓰면 각 배열의 크기가 다른 2차원 배열도 만들 수 있다.

할당을 했으니 다 사용한 후에 해제하는 방법을 알아보자. 해제의 순서는 할당과 반대로 오른쪽에 있는 100칸짜리들부터 해제한다. 50칸을 먼저 해제해버리면 100칸짜리들의 주소가 어딘지 알 수 없게 되버리니까 조심하자.


for(i = 0; i < 50; i++)
delete [] text[i];

delete [] text;

코드3. 이중 포인터를 이용한 배열의 해제

 

메모리 해제를 제대로 안시키면 런타임 에러가 발생할수 있으니 유의하자.

 

출처 : http://blog.naver.com/alsmaker?Redirect=Log&logNo=120033075870

728x90

+ Recent posts