지난 달에 어떤 프로그램을 짜다보니 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);
}
댓글 없음:
댓글 쓰기