2014-01-09 70 views
0

所以即時嘗試定義一個通用的ADT。 我有一個結構,看起來像這樣:C:從void *讀取int ** *

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 **'不是一個二維數組。另外,不要強制轉換'void *'(這包括'grid-> table'和'malloc()'的返回類型)。 – 2014-01-09 13:22:30

+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

相關問題