2014-01-09 5 views
0

так что я пытаюсь определить общий ADT. У меня есть структура, которая выглядит следующим образом:C: Чтение int ** из void *

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

, как вы можете видеть, у меня есть указатель недействительного, который должен быть в состоянии хранить различные типы данных. для этого экземпляра им пытается указать на междунар ** (двумерный массив), который возвращается с помощью этой функции:

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 **» не является двумерным массивом. Кроме того, не бросайте '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

Смежные вопросы