我的程序中没有这个代码片段:
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是双指针类型的二维数组。现在,我得到一个警告“赋值从指针进行整数赋值而不进行强制转换”。有人可以向我解释这个问题以及如何解决吗?
答案 0 :(得分:3)
此代码无法为数组正确分配空间。
当您尝试分配给b->field[i][y]
时,有两个问题。首先,该字段的类型为int
,但是您正在尝试为其分配一个指针。这就是警告的来源。其次,field
尚未指向任何地方,因此field[i]
正在取消引用未初始化的指针。您必须先为field
分配内容,然后才能这样做。
您需要做的是为int *
数组分配空间并将其分配给field
(第一维),然后为每个数组成员为{{1}数组分配空间},并将其分配给每个成员(第二个维度):
int