так что я пытаюсь определить общий 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, любые идеи?
Просьба указать язык, на котором вы работаете. – geoffspear
«int **» не является двумерным массивом. Кроме того, не бросайте 'void *' (это включает в себя 'grid-> table' и возвращаемый тип' malloc() '). –
Вы пробовали 'int ** arr = (int **) (grid-> table)' и с помощью 'arr' после этого? – Kakadu