【问题标题】:Why my program stops when i try to give values in an array of a struct?当我尝试在结构数组中给出值时,为什么我的程序会停止?
【发布时间】:2013-08-17 12:28:24
【问题描述】:

我需要创建一个图形并在其节点中存储几个变量。为此,我想创建一个带有数组和整数的结构。然后创建一个二维数组,该数组将保存我创建的所有节点,第二个数组用于保存节点之间的连接。我的问题是,当我尝试初始化节点数组时,程序停止工作。谁能告诉我我做错了什么?

 struct node {
               int KEYS_UNLOCKED[43];
               int points_given;
        };


struct node **NODE_MAT;
NODE_MAT = malloc(doors*sizeof(struct node *) * sizeof(struct node));
for(i=0; i<doors; i++)
    NODE_MAT = malloc(doors*sizeof(struct node *) * sizeof(struct node));

for(i=0; i<doors; i++)
    {
        for(j=0; j<doors; j++)
        {
            for (k=0; k<43; k++)
                NODE_MAT[i][j].KEYS_UNLOCKED[k] = 0;
            NODE_MAT[i][j].points_given = 0;
        }
    }

【问题讨论】:

  • 因为你的结构没有实例。
  • 谢谢,我没看到!
  • 还是不行
  • 为什么 - NODE_MAT = malloc(doors*sizeof(int)); ?它应该是-NODE_MAT = malloc(doors*sizeof(struct node *) * sizeof(struct node));。另外,typedef 是怎么回事?
  • 仍然没有,typedef 是一个“绝望”的变化,以防万一它起作用,而不是它会但仍然。

标签: c arrays struct initialization


【解决方案1】:
typedef struct 
{
  int KEYS_UNLOCKED[43];
  int points_given;
}node ;

node **NODE_MAT;

NODE_MAT = (node **)malloc(doors*sizeof(node *)); 
for(i=0; i<doors; i++)
   NODE_MAT[i] = (node *)malloc(doors*sizeof(node));


for(i=0; i<doors; i++)
{
  for(j=0; j<doors; j++)
  {
    for (k=0; k<43; k++)
        NODE_MAT[i][j].KEYS_UNLOCKED[k] = 0;
    NODE_MAT[i][j].points_given = 0;
  }
}

// At end don't forget to free memory !
for(i = 0; i < doors; i++)
    free(NODE_MAT[i]);
free(NODE_MAT);

【讨论】:

  • 作品 4 出 5 (字面意思......我不知道为什么会这样)。最后我只有free (NODE_MAT); ,我不知道我之前必须做for循环。
  • @AlexisS。不应该,它将使用整个doors X doors 矩阵
【解决方案2】:
typedef struct node
{
    int KEYS_UNLOCKED[43];
    int points_given;
};

struct node **NODE_MAT;
NODE_MAT = malloc(doors*doors*sizeof(struct node *)); 

for(i=0; i<doors*doors; i++)
                     NODE_MAT[i] = malloc(sizeof(struct node));
for(i=0; i<doors; i++)
{
  for(j=0; j<doors; j++)
  {
    for (k=0; k<43; k++)
        NODE_MAT[i*doors+j]->KEYS_UNLOCKED[k] = 0;
    NODE_MAT[i*doors+j]->points_given = 0;
  }
}

【讨论】:

  • 有效!但是你的表格是否意味着我必须充当 NODE_MAT 是一维数组?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
  • 2021-07-01
相关资源
最近更新 更多