c - For 循环 - 结构

标签 c

我有这部分代码:

for(i = 0; i < matrix->y; i++)
{
  printf("3.%i - %i %i\n", i, matrix->y, matrix->x);//write correct "3.0 - 3 4"
  for(j = 0; j < matrix->x; j++)
  {
    printf("N - %i %i\n", matrix->y, matrix->x);//never write anything
    fscanf(input, "%i", &grid[i][j]);
  }
  printf("3.%i - %i %i\n", i, matrix->y, matrix->x);//write wrong "3.0 - 3 0"
}

第一个 printf 输出 y=3 和 x=4,但它永远不会进入循环,它永远不会到达 for 循环内的第二个 printf。当我在 for 循环后的第一行写相同的 printf 时,它告诉我 y=3 和 x=0。 我在哪里做错了。

谢谢。

编辑

代码是按原样编写的。没有跳过任何行。

矩阵定义

typedef struct matrix
{
  int x;
  int y;
  int ** grid;
} Matrix;

i 和 j 定义为

int i, j;

整个函数

Matrix * loadMatrix(char * filename)
{
  Matrix * matrix;
  FILE * input;
  input = fopen(filename, "r");
  if (input == NULL)
    printError (ERR_READFILE);
  else
  {
    fscanf(input, "%i", &(matrix->y));
    fscanf(input, "%i", &(matrix->x));
    int i, j;
    int grid[matrix->y][matrix->x];
    matrix->grid = grid;
    printf("2 - %i %i\n", matrix->y, matrix->x);
    for(i = 0; i < matrix->y; i++)
    {
      printf("3.%i - %i %i\n", i, matrix->y, matrix->x);
      for(j = 0; j < matrix->x; j++)
    {
    printf("N - %i %i\n", matrix->y, matrix->x);
    fscanf(input, "%i", &grid[i][j]);
    }
    printf("3.%i - %i %i\n", i, matrix->y, matrix->x);
    fclose(input);
  }
  return matrix;
}

最佳答案

您的程序行为未定义,因为您没有为 matrix 分配存储空间.所以任何事情都有可能发生。

在声明 matrix 后将其添加到某处(就在 fscanf 行之前似乎是最佳的):

matrix = malloc(sizeof(Matrix));

并更改声明 matrix 的行到:

Matrix *matrix = NULL;

(否则,如果 fopen 失败,您将返回垃圾。)

第二个问题是您也未能为 matrix->grid 分配适当的存储空间.函数返回后,您不能保留指向局部变量的指针。

您需要使用 malloc 创建该存储或 calloc也。看到这个问题:How do I work with dynamic mutli-dimensional arrays in C有关如何执行此操作的示例。

您还需要注意 free一旦您用完它们,它们都会出现。

别忘了 #include <stdlib.h> ,这是 malloc 所必需的和 free .

关于c - For 循环 - 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7650266/

相关文章:

java - JNI 不满意链接错误

c - 指针数组,停止运行

c - Z3 无符号变量 - 简化

C Incompatible pointer type 消息似乎列出了预期和实际的相同指针类型

CS 50- Pset 1 马里奥程序

c - 将结构传递给函数

c - 内存泄漏普通c

c - 如何防止在 USB 传输中丢失数据?

C语言从2个标准中选择一个排序函数

c - 我如何简化/压缩代码(如果可能)?