더북(TheBook)

이 책에서는 프로그램 소스 코드를 조금이라도 짧게 하고 가독성을 높이기 위하여 종종 이중 for 루프를 다음과 같은 형태로 표현할 것이다.

for (int j = 0; j < h; j+ +)
for (int i = 0; i < w; i+ +)
{
    p[j][i] = p[j][i] + 1;
}

동적으로 생성한 배열은 사용이 끝나면 반드시 메모리를 해제해주어야 한다. 지역변수로 선언된 정적 배열은 그 배열을 사용한 블록 또는 함수가 종료되면 자동으로 메모리 공간이 사라지지만, 동적 배열은 사용자가 직접 메모리 공간을 해제해주어야 한다. 영상과 같이 대용량의 데이터를 다루는 작업을 할 때, 메모리 공간의 해제를 제때에 해주지 않으면 프로그램이 오동작을 할 가능성이 생길 수 있기 때문에 주의해야 한다. 앞에서 동적 할당한 2차원 배열 p를 해제하기 위해서는 다음과 같이 코드를 작성해야 한다.

for (int i = 0; i < h; i+ +)
    delete[] p[i];
delete[] p;

동적 할당된 2차원 배열의 메모리를 해제하는 방법은 동적 배열을 할당하는 방법의 반대이다. 위 코드에서 for 루프 안의 delete[] p[i]; 문장은 그림 1-13에서 ‘동적 할당된 데이터 공간ʼ으로 표현한 메모리를 해제하는 역할을 한다. 맨 아랫줄의 delete[] p; 문장은 그림 1-13에서 ‘동적 할당된 포인터형 공간ʼ으로 표현한 메모리를 해제한다. 앞서 new 연산자로 메모리를 할당할 때 괄호 연산자([])를 사용하여 배열 형태로 메모리를 할당하였으므로 delete 연산자로 메모를 해제할 때에도 동일하게 괄호 연산자를 사용해야 함을 명심해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.