这个初始化有什么问题?为什么我尝试使用初始化函数初始化图形时无法成功
What's wrong with this initialization? Why can't I succeed when I try to initialize a graph using the initialization function
使用VS,C语言。
我尝试通过初始化函数
来初始化图形结构
#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。
为什么?
在 creatUDN
中删除对 G
的分配。
G = (MGraph*)malloc(sizeof(MGraph));
现在您的代码可以运行了。
您在 main
中正确分配了此数据结构并将指针传递给 creatUDN
,但出于某种原因您在 creatUDN
中再次分配了它,因此您分配的数据结构在main
保持不变。
另一种方法是 return 从 creatUDN
分配的数据结构。看起来像这样
MGraph *creatUDN() {
G = (MGraph*)malloc(sizeof(MGraph));
...
return G;
}
int main()
{
MGraph *g = creatUDN();
printf("%d", g->e);
}
您似乎写了介于这两种方法之间的东西。
使用VS,C语言。 我尝试通过初始化函数
来初始化图形结构#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。 为什么?
在 creatUDN
中删除对 G
的分配。
G = (MGraph*)malloc(sizeof(MGraph));
现在您的代码可以运行了。
您在 main
中正确分配了此数据结构并将指针传递给 creatUDN
,但出于某种原因您在 creatUDN
中再次分配了它,因此您分配的数据结构在main
保持不变。
另一种方法是 return 从 creatUDN
分配的数据结构。看起来像这样
MGraph *creatUDN() {
G = (MGraph*)malloc(sizeof(MGraph));
...
return G;
}
int main()
{
MGraph *g = creatUDN();
printf("%d", g->e);
}
您似乎写了介于这两种方法之间的东西。