C - 赋值从指针生成整数而不进行强制转换

C - Assignment makes integer from pointer without cast

我的程序中有这段代码片段:

typedef struct board_t{
   int x_pos;                 
   int y_pos;
   int size;
   int counter;        
   int** field;
};

int func(struct board_t* b){

[...]

int i;
for(i=b->size; i>=1; i--){    
    int y;
    for(y=b->size; y>=b->size; y--){
        b->field[i][y] = (int*)malloc(sizeof(int));   //warning here
        if(b->field[i][y] == NULL){
            printf("Failed to save memory...");
            return 1;
        }
    }
 }
}

字段是双指针类型的二维数组。现在我收到警告 "assignment makes integer from pointer without cast"。有人可以向我解释一下这个问题以及如何解决吗?

此代码没有为数组正确分配 space。

当您尝试分配给 b->field[i][y] 时,会出现两个问题。首先,该字段的类型为 int,但您正试图为其分配一个指针。这就是警告的来源。其次,field 还没有指向任何地方,所以 field[i] 正在取消引用一个未初始化的指针。你不能这样做,直到你第一次分配一些东西给 field.

你需要做的是为int *的数组分配space并将其分配给field(第一维),然后为每个数组成员分配space 为 int 的数组并将其分配给每个成员(第二维):

int i;
b->field = malloc(b->size * sizeof(*b->field));
if (!b->field) {
    perror("malloc failed");
    exit(1);
}
for (i=0; i<b->size; i++) {
    b->field[i] = malloc(b->size * sizeof(**b->field));
    if (!b->field[i]) {
        perror("malloc failed");
        exit(1);
    }
}