C-赋值使指针从整数开始而无需强制转换

时间:2018-10-19 13:38:34

标签: c double-pointer

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

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;
        }
    }
 }
}

field是双指针类型的二维数组。现在,我得到一个警告“赋值从指针进行整数赋值而不进行强制转换”。有人可以向我解释这个问题以及如何解决吗?

1 个答案:

答案 0 :(得分:3)

此代码无法为数组正确分配空间。

当您尝试分配给b->field[i][y]时,有两个问题。首先,该字段的类型为int,但是您正在尝试为其分配一个指针。这就是警告的来源。其次,field尚未指向任何地方,因此field[i]正在取消引用未初始化的指针。您必须先为field分配内容,然后才能这样做。

您需要做的是为int *数组分配空间并将其分配给field(第一维),然后为每个数组成员为{{1}数组分配空间},并将其分配给每个成员(第二个维度):

int