2012-10-14 2 views
0

열 수가 2임을 알 수있는 3 차원 정수 배열을 만들려고합니다. malloc을 사용하여 배열을 순차적으로 초기화하고 있습니다. 무엇이 잘못 될 수 있다고 제안합니까?3 차원 배열 C++ (malloc 사용)에서 액세스 위반

int **output_vertex[2]; 
for(int j=0;j<4;j++) 
    output_vertex[j]= (int **)malloc(sizeof(int **)); 
output_vertex[1][0]==(int*)malloc(2*sizeof(int)); 
output_vertex[1][0][0] =11; 
//also tried *output_vertex[1][0] =11; 
+0

clipcounter가 0 인 경우에도 sorry.it는 작동하지 않습니다. (편집 됨) – code4fun

+3

output_vertex에 2 명의 멤버를 할당하고 있지만 그 중 4 개를 반복하고 있습니다. 왜? – imreal

+0

나는 그 부분이 잘 작동한다고 생각한다. 마지막 줄을 어 기고있다. – code4fun

답변

1

오류가 무엇인지 (또는 어떤 오류를 언급했는지 이해하는 데) 약간의 문제가 있습니다. 첫째, 왜 정적으로 배열을 생성 한 다음 malloc을 사용하는지 알지 못합니다. 둘째로, 나는 for 루프를 네 번 반복하는 이유를 4 번 (0, 1, 2, 3) 이해하지 못한다. 당신의 할당은 다음과 같아야합니다 :

int **output_vertex; 
output_vertex = (int **)malloc(2*(sizeof(int **))); 
+0

당신을 따라갈 수 없습니다. 코드에서 2 차원 배열을 선언하고 있습니다.난 3 차원 배열을 선언하고 싶습니다 – code4fun

+0

당신이 제발 해결할 수있는 방법을 제안하시기 바랍니다 제 목표는 각각의 행을 알 수없고 열이 2 인 2 차원 정수 배열이어야하는 5 개의 배열을 얻는 것입니다. – code4fun

1

당신이 갖고있는 배열 선언은 의도 한 것이 아닙니다. int에 대한 포인터에 대한 포인터의 두 요소 배열이 있습니다. This page은 이러한 선언을 읽는 좋은 지침입니다.

는 개인적으로, 나는 바닥부터 다음과 같은 형식 정의를 사용하여 복잡한 형태를 구축하는 것을 선호 : 간단하게 할 수있는 방법은 아마도 있습니다

typedef int[2] element_type; // this is the 2-element array of ints 
typedef element_type* inner_type; // this is the array of unknown size 
typedef inner_type[5] outer_type; // this is the actual type we want to use 

outer_type output_vertex; // we now have an array of 5 inner_type variables on the stack 
// The output_vertex is *uninitialized* so we have to initialize each of its elements 
for (int i=0; i < 5; ++i) { 
    output_vertex[i] = new inner_type[SOME_SIZE]; 
} 
// do stuff with output_vertex now that it's initialized 
// then, to prevent memory leaks, delete the memory you allocated 
for (int i=0; i < 5; ++i) { 
    delete[] output_vertex[i]; 
} 

,하지만 그건 시작해야합니다. 당신이 inner_type가 추가가되고 싶다면

, 나는 강력하게 원시 배열 대신 std::vector를 사용하는 것이 좋습니다 것이다. 원시 배열을 사용하여 수행해야 할 많은 부기가 있으므로, 나는 그 예제를 제시하지 않을 것이다; 그러나, 여기에 더 또는 덜 당신이 std::vector으로 어떻게 할 것인지 :

typedef std::pair<int,int> element_type; // this is the 2-element array of ints as a pair 
typedef std::vector<element_type> inner_type; // dynamic vector this time 

inner_type output_vertex[5]; // we now have an array of 5 inner_type variables on the stack 
// do stuff with output_vertex 

std::vector 그냥 빨리 동적으로 할당 된 배열로,하지만 당신은 자신을 부기의 작업을 수행 할 필요가 없습니다. 또한 많은 힙 할당 객체를 관리 할 필요가 없다는 이점이 있습니다.

원시 배열은 컨테이너 (예 : std::vector)와 호환되지 않으므로 여기서 std::pair을 사용합니다.

C++ 11 (또는 부스트)를 사용할 수 있고 표준 컨테이너에 들어갈 수있는 두 개 이상의 고정 크기 배열이 필요한 경우 std::array을 사용하십시오.

+0

고마워요. "inner_type"의 크기를 모르면 "inner_type"에 새 요소를 추가 할 때만 알 수 있습니다. – code4fun