동적으로 메모리 할당에 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
'Basic Programming > C, C++' 카테고리의 다른 글
C++ - 메모리 단편화(Fragmentation)의 해결방법 (0) | 2016.03.21 |
---|---|
C++ - Frame rate (0) | 2016.03.07 |
C++ - null pointer를 써야하는 이유 (0) | 2016.03.04 |
C++ - Effectvice C++의 55가지 테크닉 Part - 4 (0) | 2016.03.04 |
C++ - Effectvice C++의 55가지 테크닉 Part - 3 (0) | 2016.03.04 |