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,任何想法?
请标记为您正在使用的语言。 – geoffspear
一个'int **'不是一个二维数组。另外,不要强制转换'void *'(这包括'grid-> table'和'malloc()'的返回类型)。 – 2014-01-09 13:22:30
你尝试过'int ** arr =(int **)(grid-> table)'并且之后使用'arr'吗? – Kakadu