배열

2015-01-30 4 views
0

나는이 문제에 완전히 막혔어요 ... 다음과 같이 부여 된 코드 구조는 다음과 같습니다 무엇 일어나는 것은배열

typedef struct _myvar{ 
    uint32_t someInt; 
    uint32_t *ptr; 
} myvar; 
... 
myvar **var; 
.. 
var = new myvar*[x]; // where x is an int 
for(int i = 0; i < y; i++){ // y is usually 2 or 4 
    var[i] = new myvar[z]; //create dynamic 2d array 
    for(int j = 0; j < z; j++){ 
     var[i][j].ptr = new int[b]; //where b is another int 
    } 
} 

내가 가지고있는 2 차원 구조를 만들려면 그것의 한 부분은 3d 즉, ptr은 int 배열에 대한 포인터 일뿐입니다.

내 코드가 컴파일되지만 ptr이 가리킬 수 있도록 메모리 할당에 seg faults가 발생합니다. 나는 약 1 시간 동안이 작업을 시도하고 도움이 필요할 때라고 생각했습니다.

감사합니다.

EDIT1 : 컴파일하지 않는 코드에 대한 주석과 관련하여 고정 코드 문제 .. 둘째 ... 원하는만큼 벡터를 사용할 수 없습니다 ... 내가 가지고있는 데이터 구조가 사용해야하는 것입니다. .

EDIT2 : b는 동적이며 명령 줄에서 설정됩니다. 테스트 용으로는 16을 사용하십시오.

+0

사용'표준 : vector' 가능한이 항목의 복사본을 유지하고 당신이하지 않아도 동적 메모리 할당을 관리하기 때문이다. –

+0

코드가 컴파일되지 않습니다. 'var = new myvar [z]'는'myvar ** var'에서 작동하지 않습니다. –

+0

무엇이 b로 설정되어 있습니까? –

답변

1

나는 당신이 당신의 인덱스와 혼동을 느끼고 있다고 생각합니다. 첫 번째 루프에서는 var [i]를 사용하므로 x가 아닌 y에서 멈춰야합니다. 열에 대해서는 j와 y를 사용했습니다. z가 뭔지 확실하지 않습니다. 그런 다음 다른 사람들이 지적한 것처럼 int와 uint32_t를 섞어서는 안됩니다. 이 시도 :

#include <iostream> 
using namespace std; 

typedef struct _myvar{ 
    uint32_t someInt; 
    uint32_t *ptr; 
} myvar; 

int main() { 

    myvar **var; 

    int x = 3; 
    int y = 4; 

    var = new myvar*[x]; // where x is an int 
    for(int i = 0; i < x; i++) { // i stops at x 
     var[i] = new myvar[y]; //create dynamic 2d array 
     for(int j = 0; j < y; j++){ 
      var[i][j].ptr = new uint32_t[16]; // used 16 for testing 
     } 
    } 


    return 0; 
} 
+0

좋아, 네가 여기있는 것과 내가 여전히 ptr의 어떤 부분에도 접근 할 수 없다. 즉'var [0] [0] .ptr [0] = 0;'(pntr이 아닌 숫자 0)을 설정하려면 seg 오류가 발생합니다. 이것은 내가 혼란 스러웠다는 것입니다 ... – Sharki

+0

@Sharki 정확한 코드를 올리시겠습니까? 나는 이것을 시도했다 : var [0] [0] .ptr [0] = 0; \t cout << "var [0] [0] .ptr [0]은"<< var [0] [0] .ptr [0] << endl; \t var [2] [3] .ptr [15] = 15; \t cout << "var [2] [3] .ptr [15]은"<< var [2] [3] .ptr [15] << endl; –