2004년 5월 6일 목요일

3차원 배열 만들기(4중 포인터 이용)

지난 달에 어떤 프로그램을 짜다보니 4중 포인터를 쓰게 됐다.
string의 matrix를 allocate하기 위한 function에서 쓰였다.

string : 별 1개
matrix : 별 2개
allocation : call by pointer에 의해 별 1개.
즉, char****

별이 1개만 넘어도 머리가 뱅글뱅글 도니까 조심해야할 필요가 있다.
다시는 쓰지 말아야지..

물론 C++이라면 별을 하나도 안 쓸 수도 있다.
char *을 string으로 바꾸고
matrix를 vector array(혹은 vector, vector)로 바꾼다.
즉, vector<vector<string> >

문제의 코드
void alloc_2d_array(char*** pptr, const int rows, const int cols)
{
    (*pptr) = new (char*)[rows];
    for (int i = 0; i < rows ; i++)
        (*pptr)[i] = new char[cols];
}

void dealloc_2d_array(char*** pptr, const int rows)
{
    for (int i = 0; i < rows; i++)
        delete [] (*pptr)[i];
    delete [] (*pptr);
}

void alloc_3d_array(char**** ppptr, const int height, const int rows, const int col
s)
{
    // parameter가 4중 포인터가 된 이유
    // * 3개 : 3차원 배열
    // * 1개 : call by pointer
    (*ppptr) = new (char**)[height];
    for (int i = 0; i < height ; i++)
        alloc_2d_array(&((*ppptr)[i]), rows, cols);
}

void dealloc_3d_array(char**** ppptr, const int height, const int rows)
{
    for (int i = 0; i < height ; i++)
        dealloc_2d_array(&((*ppptr)[i]), rows);

    delete [] (*ppptr);
}

댓글 없음:

댓글 쓰기