Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的循环只迭代两次?_C - Fatal编程技术网

C 为什么我的循环只迭代两次?

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;

我定义了两个结构,当我循环设置它们的值时,它只循环两次作为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;
  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或在循环中使用它。所有这些都意味着我不理解所有这些。但让我自己读更多关于灵活阵列的内容。