|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<stdio.h>
- #include<stdlib.h>
- typedef int ElemType;
- #define MAXV 20
- #define INF 32767
- typedef struct//顶点
- {
- char no;
- ElemType data;
- }VertexType;
- typedef struct//邻接矩阵数组
- {
- int edges[MAXV][MAXV]; //邻接矩阵数组
- int n,e; //顶点数,边数
- VertexType vexs[MAXV]; //顶点信息
- }MatGraph;
- //创建图的运算算法
- void CreateAdj(MatGraph *G)//创建图的邻接矩阵
- {
- G=(MatGraph *)malloc(sizeof(MatGraph));
- int i=0,j=0;
- printf("请输入邻接矩阵的顶点数和边数:\n");
- scanf("%d",&G->n);
- scanf("%d",&G->e);
- printf("请输入邻接矩阵的顶点信息:\n");
- while(i<G->n)
- {
- scanf("%c",&G->vexs[i].no);
- i++;
- getchar();
- }
- i=0;
- printf("请输入邻接矩阵:\n");
- while(i<G->n)
- {
- while(j<G->n)
- {
- scanf("%d",&G->edges[i][j]);
- j++;
- }
- j=0;
- i++;
- }
- }
- //输出图的运算算法
- void DispAdj(MatGraph *G)
- {
- int i=0,j=0;
- printf("邻接矩阵:\n");
- while(i<G->n)
- {
- while(j<G->n)
- {
- printf("%3d",G->edges[i][j]);
- j++;
- }
- printf("\n");
- j=0;
- i++;
- }
- }
- //销毁图的运算算法
- void DestroyAdj(MatGraph *G)
- {
- free(G);
- }
- void main()
- {
- MatGraph *G;
- CreateAdj(G);
- DispAdj(G);
- }
复制代码
在调试时G->n,G->e 出现CXX0030:Error:expression cannot be evpraluated 的提示
void main()
{
MatGraph *G;
CreateAdj(G);
DispAdj(G);
}
把这里的MatGraph *G;换成MatGraph *G=(MatGraph *)malloc(sizeof(MatGraph));可以解决 就不需要void CreateAdj(MatGraph *G)中的G=(MatGraph *)malloc(sizeof(MatGraph));
如果你就是为了在void CreateAdj(MatGraph *G)申请内存 那就返回值类型改为MatGraph * 然后返回G
因为你原来void CreateAdj(MatGraph *G)函数中的 G=(MatGraph *)malloc(sizeof(MatGraph));并不会把申请地址传给void main()中的G 所以会导致你DispAdj(G);中的G是个野指针
|
|