初始化有什么问题?尝试使用初始化函数初始化图形时,为什么我无法成功

时间:2020-05-16 14:38:29

标签: c data-structures graph initialization

使用VS,C语言。 我尝试通过初始化功能来初始化Graph结构

#include<stdio.h>
#define maxint 1000
#define mvnum 100
typedef struct
{
  int vexs[mvnum];
  int edges[mvnum][mvnum];
  int n, e;
}MGraph;
void creatUDN(MGraph *G) {
  G = (MGraph*)malloc(sizeof(MGraph));
  int i, j, k, w;
  scanf_s("%d", &(G->n));
  scanf_s("%d", &(G->e));
  for (i = 0; i < G->n; i++)
      scanf_s("%d", &(G->vexs[i]));
  for (i = 0; i < G->n; ++i)
      for (j = 0; j < G->n; ++j)
          G->edges[i][j] = maxint;
  for (k = 0; k < G->e; k++)
  {
      scanf_s("%d %d %d", &i, &j, &w);
      G->edges[i-1][j-1] = w;
  }
  for (i = 0; i < G->n; ++i)
  {
      for (j = 0; j <G->n; ++j)
          printf("%d\t", G->edges[i][j]);
      printf("\n");
  }
}

这是主要功能

    int main()
{
  MGraph *g;
  g=(MGraph*)malloc(sizeof(MGraph));
  creatUDN(g);
  **printf("%d", g->e);**
}

它表明g在初始化之后仍然是一个Nullpointer。 为什么?

1 个答案:

答案 0 :(得分:0)

G中删除对creatUDN的分配。

G = (MGraph*)malloc(sizeof(MGraph));

现在您的代码可以使用了。

您已在main中正确分配了此数据结构,并将指针传递到creatUDN,但是由于某种原因,您又在creatUDN中分配了它,因此在{{ 1}}保持不变。

您可以执行此操作的另一种方法是返回main中分配的数据结构。看起来像这样

creatUDN

您似乎写的东西介于这两种方法之间。