Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[760] Re:죄송한데 한가지만 더 물어보겠습니다.
김백일 [cedar] 1746 읽음    2002-06-15 10:14
황창호 님이 쓰신 글 :
:  2차원 array를 쓰고 싶거든요.
:
:  그런데, 그 array가 x * y 행렬이라 생각하면, y는 3으로 정해져 있어요.
:
:  무슨 말이냐면요,
:
:  cin >> numOfBlock;
:  int *given_block = new int[numOfBlock][3];
:
:  이렇게요.
:
:  이것도 에러가 나네요.
:
:  어떻게 고쳐야 할까요?

new와 delete를 사용한 동적 할당으로 다차원 배열을 만들고 삭제하는 방법은
상당히 귀찮습니다.

다음은 빌더 헬프에 있는 예제입니다.

// ALLOCATE A TWO-DIMENSIONAL SPACE, INITIALIZE, AND DELETE IT.

#include <exception>
#include <iostream>

using std::cout;
using std::endl;
void display(long double **);
void de_allocate(long double **);

int m = 3;                               // THE NUMBER OF ROWS.
int n = 5;                               // THE NUMBER OF COLUMNS.

int main(void)
{
   long double **data;

   try {                                 // TEST FOR EXCEPTIONS.
      data = new long double*[m];        // STEP 1: SET UP THE ROWS.
      for (int j = 0; j < m; j++)
          data[j] = new long double[n];  // STEP 2: SET UP THE COLUMNS
   }
   catch (std::bad_alloc) {  // ENTER THIS BLOCK ONLY IF bad_alloc IS THROWN.
      // YOU COULD REQUEST OTHER ACTIONS BEFORE TERMINATING
      cout << "Could not allocate. Bye ...";
      exit(-1);
   }

   for (int i = 0; i < m; i++)
      for (int j = 0; j < n; j++)
          data[i][j] = i + j;            // ARBITRARY INITIALIZATION

   display(data);
   de_allocate(data);
   return 0;

}

void display(long double **data)
{
   for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++)
             cout << data[i][j] << " ";
       cout << "\n" << endl;
   }
}

void de_allocate(long double **data) {
   for (int i = 0; i < m;  i++)
       delete[] data[i];                 // STEP 1: DELETE THE COLUMNS
   delete[] data;                        // STEP 2: DELETE THE ROWS
}

이 방법보다는 역시 STL의 vector나 deque을 사용한 방법을 권합니다.
C/C++ Tip'N Tricks에 올린 제 글을 참고하세요.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=2
상당히 간단하다는 것을 알 수 있습니다.

+ -

관련 글 리스트
752 키보드 인풋을 받아 그만큼의 array를 할당하려고 하는데요. 황창호 1648 2002/06/14
753     Re:당연히 안됩니다. 김백일 1828 2002/06/14
754         죄송한데 한가지만 더 물어보겠습니다. 황창호 1763 2002/06/14
760             Re:죄송한데 한가지만 더 물어보겠습니다. 김백일 1746 2002/06/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.