2014-01-09 3 views
0

에서 int **를 읽으므로 일반 ADT를 정의하려고합니다. 난은 다음과 같습니다 구조체를 가지고 :C : void **

struct grid_type{ 
    void* table; 
    int startX, startY, endX, endY, xDim, yDim; 
}; 

당신은 내가 다양한 데이터 유형을 저장할 수 있어야 무효 포인터를 볼 수 있습니다. 이 함수에 의해 리턴 된 INT ** (이차원 배열)를 가리 키려고 인스턴스 메신저 용 :

int** CreateInt(int xDim, int yDim){ 
    int** table = NULL; 
    int i, j; 
    table = (int**)malloc(xDim*sizeof(int*)); 
    if (table == NULL){ 
     puts("failed malloc"); 
     exit(1); 
    } 
    for (i = 0; i < xDim; i++){ 
     table[i] = (int*)malloc(yDim*sizeof(int)); 
     if (table[i] == NULL){ 
      puts("failed malloc"); 
      exit(1); 
     } 
     for (j = 0; j < yDim; j++){ 
      table[i][j] = 1; 
     } 
    } 
    return table; 
} 

아주 기본적인 기능. 그래서 무엇을하지 못하면 나중에이 배열에서 읽는 것이고, 어떤 데이터에도 액세스 할 수없는 것처럼 보입니다. 노력하는 방법 메신저 입니다 :

void PrintInt(grid* grid){ 
    int i, j, add = 0; 
    for (i = 0; i < grid->xDim; i++){ 
     for (j = 0; j < grid->yDim; j++){ 
      add = i*(grid->xDim-1) + j; 
      printf("%d ", *((int*)grid->table+add)); <--- PROBLEM 
     } 
     printf("\n"); 
    } 
} 

을하고이 모든 주에서 발생하는 방법입니다, 어떤 아이디어

grid1 = CreateGrid((*CreateInt), xDim, yDim, startX, startY, endX, endY); 
PrintInt(grid1); 

어떤 메신저가 점점 100 % jibrish입니까?

+0

사용중인 언어로 태그를 지정하십시오. – geoffspear

+0

'int ** '는 2 차원 배열이 아닙니다. 또한'void *'(이것은'grid-> table'과'malloc()'의 리턴 타입을 포함하지 않는다). –

+0

'int ** arr = (int **) (grid-> table)'을 시도해 본 다음 그 뒤에'arr'을 사용 했습니까? – Kakadu

답변

1
void PrintInt(grid* grid){ 
    int i, j; 
    int **table = grid->table; 
    for (i = 0; i < grid->xDim; i++){ 
     for (j = 0; j < grid->yDim; j++){ 
      printf("%d ", table[i][j]); 
     } 
     printf("\n"); 
    } 
} 
+0

'void *'형을 더하거나 뺄 수 없습니다. (구현이 예상되는 경우도있을 수 있습니다.) – BLUEPIXY