gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:58 25 4
gpt4 key购买 nike

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

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

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

最佳答案

这段代码没有为数组正确分配空间。

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

你需要做的是为一个int *的数组分配空间,并赋值给field(第一个维度),然后为每个数组成员分配空间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);
}
}

关于C - 赋值从指针生成整数而不进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52893516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com