使用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。 为什么?
答案 0 :(得分:0)
在G
中删除对creatUDN
的分配。
G = (MGraph*)malloc(sizeof(MGraph));
现在您的代码可以使用了。
您已在main
中正确分配了此数据结构,并将指针传递到creatUDN
,但是由于某种原因,您又在creatUDN
中分配了它,因此在{{ 1}}保持不变。
您可以执行此操作的另一种方法是返回从main
中分配的数据结构。看起来像这样
creatUDN
您似乎写的东西介于这两种方法之间。