C 为什么我的循环只迭代两次?
我定义了两个结构,当我循环设置它们的值时,它只循环两次作为printf返回。有什么想法吗C 为什么我的循环只迭代两次?,c,C,我定义了两个结构,当我循环设置它们的值时,它只循环两次作为printf返回。有什么想法吗 typedef struct { int x; int y; unsigned char status; } Cell; typedef struct { int sizeX; int sizeY; Cell cell[]; } World; int main() { int i, x, y; i = 0; World grid; grid.sizeX = 10;
typedef struct {
int x;
int y;
unsigned char status;
} Cell;
typedef struct {
int sizeX;
int sizeY;
Cell cell[];
} World;
int main() {
int i, x, y;
i = 0;
World grid;
grid.sizeX = 10;
grid.sizeY = 10;
for (x = 0; x < grid.sizeX; x++) {
for (y = 0; y < grid.sizeY; y++) {
Cell cell;
cell.x = x;
cell.y = y;
printf("%d,%d: ", cell.x, cell.y);
grid.cell[i] = cell;
i++;
}
}
return 0;
}
typedef结构{
int x;
int-y;
无符号字符状态;
}细胞;
类型定义结构{
int sizeX;
int SIZE;
细胞[];
}世界;
int main(){
int i,x,y;
i=0;
世界电网;
grid.sizeX=10;
grid.sizeY=10;
对于(x=0;x
编辑:
下面给出了正确答案,感谢您的评论和耐心等待 您的
World
结构的最后一个元素是灵活的数组成员。实际上,没有为该成员留出空间。因此,在写入数组时会注销结构的结尾,从而导致未定义的行为
您需要声明一个World*
并使用malloc
为结构和数组分配空间
World *world = malloc(sizeof(World) + 10 * 10 * sizeof(Cell));
您的
World
结构的最后一个元素是灵活的数组成员。实际上,没有为该成员留出空间。因此,在写入数组时会注销结构的结尾,从而导致未定义的行为
您需要声明一个World*
并使用malloc
为结构和数组分配空间
World *world = malloc(sizeof(World) + 10 * 10 * sizeof(Cell));
网格。单元格[]
未分配任何内存空间。在循环开始之前,应通过添加以下行为其分配内存:
grid.cell = Cell[100];
大小100
基于grid.sizeX=10的事实代码>和grid.sizeY=10代码>。不需要使用malloc()
,因为大小是固定的
如果grid.sizeX
和grid.sizeY
的大小不固定,则应添加以下行,而不是grid.cell=cell[100]代码>:
grid.cell = (Cell*)malloc(sizeof(Cell) *(grid.xSize * grid.ySize ));
行World*grid=malloc(sizeof(World)+xSize*ySize*sizeof(Cell))您添加的代码>只是一种欺骗方式,不太清楚。即使它在逻辑上是正确的 网格。单元格[]
未分配任何内存空间。在循环开始之前,应通过添加以下行为其分配内存:
grid.cell = Cell[100];
大小100
基于grid.sizeX=10的事实代码>和grid.sizeY=10代码>。不需要使用malloc()
,因为大小是固定的
如果grid.sizeX
和grid.sizeY
的大小不固定,则应添加以下行,而不是grid.cell=cell[100]代码>:
grid.cell = (Cell*)malloc(sizeof(Cell) *(grid.xSize * grid.ySize ));
行World*grid=malloc(sizeof(World)+xSize*ySize*sizeof(Cell))您添加的代码>只是一种欺骗方式,不太清楚。即使它在逻辑上是正确的 以下是结果:
#include <stdio.h>
#include <stdlib.h>
#define LIVE 1
#define DEAD 0
#define xSize 10
#define ySize 10
typedef struct {
int x;
int y;
unsigned char status;
} Cell;
typedef struct {
int sizeX;
int sizeY;
Cell cell[1];
} World;
int main() {
int i, x, y;
i = 0;
World *grid = malloc(sizeof(World) + xSize * ySize * sizeof(Cell));;
grid->sizeX = xSize;
grid->sizeY = ySize;
for (x = 0; x < grid->sizeX; x++) {
for (y = 0; y < grid->sizeY; y++) {
Cell cell;
cell.x = x;
cell.y = y;
cell.status = DEAD;
printf("%d,%d: ", cell.x, cell.y);
grid->cell[i] = cell;
i++;
}
}
return 0;
}
#包括
#包括
#定义LIVE 1
#定义死0
#定义xSize 10
#定义尺寸10
类型定义结构{
int x;
int-y;
无符号字符状态;
}细胞;
类型定义结构{
int sizeX;
int SIZE;
细胞[1];
}世界;
int main(){
int i,x,y;
i=0;
World*grid=malloc(sizeof(World)+xSize*ySize*sizeof(Cell));;
网格->sizeX=xSize;
网格->大小=大小;
对于(x=0;xsizeX;x++){
对于(y=0;ysizeY;y++){
细胞;
单元格x=x;
单元y=y;
cell.status=死亡;
printf(“%d,%d:”,单元格x,单元格y);
网格->单元[i]=单元;
i++;
}
}
返回0;
}
以下是结果:
#include <stdio.h>
#include <stdlib.h>
#define LIVE 1
#define DEAD 0
#define xSize 10
#define ySize 10
typedef struct {
int x;
int y;
unsigned char status;
} Cell;
typedef struct {
int sizeX;
int sizeY;
Cell cell[1];
} World;
int main() {
int i, x, y;
i = 0;
World *grid = malloc(sizeof(World) + xSize * ySize * sizeof(Cell));;
grid->sizeX = xSize;
grid->sizeY = ySize;
for (x = 0; x < grid->sizeX; x++) {
for (y = 0; y < grid->sizeY; y++) {
Cell cell;
cell.x = x;
cell.y = y;
cell.status = DEAD;
printf("%d,%d: ", cell.x, cell.y);
grid->cell[i] = cell;
i++;
}
}
return 0;
}
#包括
#包括
#定义LIVE 1
#定义死0
#定义xSize 10
#定义尺寸10
类型定义结构{
int x;
int-y;
无符号字符状态;
}细胞;
类型定义结构{
int sizeX;
int SIZE;
细胞[1];
}世界;
int main(){
int i,x,y;
i=0;
World*grid=malloc(sizeof(World)+xSize*ySize*sizeof(Cell));;
网格->sizeX=xSize;
网格->大小=大小;
对于(x=0;xsizeX;x++){
对于(y=0;ysizeY;y++){
细胞;
单元格x=x;
单元y=y;
cell.status=死亡;
printf(“%d,%d:”,单元格x,单元格y);
网格->单元[i]=单元;
i++;
}
}
返回0;
}
单元格[]代码>!!由结构定义的单元格数组,这是错误的吗?您是否尝试过使用调试器单步执行代码?您肯定应该阅读更多的内容,因为您现在所做的是在零大小数组的边界之外写入,这会导致未定义的行为。您需要在使用它之前保留空间。好的,看看这个,谢谢代码>!!由结构定义的单元格数组,这是错误的吗?您是否尝试过使用调试器单步执行代码?您肯定应该阅读更多的内容,因为您现在所做的是在零大小数组的边界之外写入,这会导致未定义的行为。您需要在使用它之前保留空间。好的,看看这个,谢谢。谢谢你的回答。我现在很难设置world.sizeX或在循环中使用它。所有这些都意味着我不理解所有这些。不过我还是想多读一些关于灵活阵列的内容。谢谢你的回答。我现在很难设置world.sizeX或在循环中使用它。所有这些都意味着我不理解所有这些。但让我自己读更多关于灵活阵列的内容。