2012-03-19 3 views
0

다음 코드에서 3 차원 배열을 만들고 싶지만 런타임 오류가 발생합니다.3 차원 동적 배열을 만드는 방법

int dim1,dim2,dim3; 
std::cout<<"dim one\n"; 
std::cin>>dim1; 
std::cout<<"dim two\n"; 
std::cin>>dim2; 
std::cout<<"dim three\n"; 
std::cin>>dim3; 

int ***three_dim=0; 
three_dim=new int**[dim1]; 
for(int i=0;i<dim1;++i) 
    three_dim[i]=new int*[dim2]; 

for(int k=0;k<dim2;++k) 
    three_dim[k]=new int*[dim3]; 
for(int k=0;k<dim1;++k) 
for(int i=0;i<dim2;++i) 
    for(int j=0;j<dim3;++j) 
     three_dim[k][i][j]=0; 

EDIT :

가 나는 입체 배열을 사용하여 필수적이다. 나는 같은 스타일의 2 차원 배열을 만들었고, 3 차원까지 확장하고 싶었습니다. 왜냐하면 그것이 내가 필요로하는 것이기 때문입니다. 하지만 당신이 볼 수 있듯이 나는 혼란 스러웠습니다.

당신에게 보 페르손

+0

a) 클래스에 1 차원 배열을 래핑하고 자신에게 인덱스 - 수학을 수행합니다. b) int 벡터 벡터 벡터를 사용합니다. c) boost :: multi_array를 사용합니다. 지금 당장하고있는 일을하지 마십시오. – jrok

+1

"***"라고 쓰여질 때마다 그것은 주석이 아닙니다. 경고음은 여러분의 마음 속에 사라져야합니다. –

+0

예, [Three Star Programmer] (http://c2.com/cgi/wiki?ThreeStarProgrammer) –

답변

2

for(int k=0;k<dim2;++k) 
    three_dim[k]=new int*[dim3]; 

두 가지 문제가이 부분을 감사드립니다. 하나는 int 대신 int*을 할당하는 것입니다. 다른 하나는 위의 줄에서 이전에 할당 된 포인터를 덮어 쓰는 것입니다.

당신은 아마 이런 식으로 할당을 수행해야합니다

for(int i=0;i<dim1;++i) 
{ 
    three_dim[i]=new int*[dim2]; 

    for(int k=0;k<dim2;++k) 
     three_dim[i][k]=new int[dim3]; 
} 
1

단지 끝에서 당신을 얻을 것이다 포인터 이런 종류의 일을하는.

실제로 3 차원 배열이 필요한 경우 더 쉽게하는 방법 중 하나 인 STL 컨테이너를 사용하는 것입니다. 나는. std::vector<std::vector<std::vector<int>>>>.

올바른 문제를 해결하고 있는지 확인하십시오. 나는 당신이 아니란 말은 아니지만, 3 차원 배열 없이도 문제를 해결할 수 있다고 느끼고 있습니다. 포인터를 사용하는 것이 쉽지 않은 경우 특히 짐승이 될 수 있습니다.

관련 문제