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);
}
}
我的程序中有这段代码片段:
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);
}
}