这里为啥报错?
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MAXV 20
#define INF 32767
typedef struct
{
int edges[MAXV][MAXV];
int n;
int e;
}MatGraph;
void CreateGraph(MatGraph*& G, int A[MAXV][MAXV], int n, int e);
void DispGraph(MatGraph* G);
MatGraph.cpp:
#include"MatGraph.h"
void CreateGraph(MatGraph*& G, int A[MAXV][MAXV], int n, int e)
{
int i = 0;
int j = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
G->edges[i][j] = A[i][j];
}
}
G->n = n;
G->e = e;
}
void DispGraph(MatGraph* G)
{
int i = 0;
int j = 0;
for (i = 0; i < G->n; i++)
{
for (j = 0; j < G->n; j++)
{
if (G->edges[i][j] == INF)
{
printf("∞");
}
printf("%4d", G->edges[i][j]);
}
}
}
test.c:
#include"MatGraph.h"
int main()
{
MatGraph* G = NULL;
int A[MAXV][MAXV] = { {0, 5, INF, 7, INF, INF},
{INF, 0, 4, INF, INF, 5, 0, INF},
{8, INF, 0, INF, INF, 9},
{INF, INF, 5, 0, INF, 6},
{INF, INF, INF, 5, 0, INF},
{3,INF, INF, INF, 1, 0} };
int n = 6;
int e = 10;
CreateGraph(G, A, n, e);
//(1)以矩阵的形式的输出
DispGraph(G);
return 0;
}
你可以将函数参数改为 MatGraph* 类型,即指针类型,或者将函数调用改为传入指向 MatGraph* 类型的指针。例如:
void CreateGraph(MatGraph* G, int A[MAXV][MAXV], int n, int e);
MatGraph* G;
int A[MAXV][MAXV] = {0};
int n = 5, e = 7;
CreateGraph(G, A, n, e);
在MatGraph.cpp文件中的函数CreateGraph()中,G是一个指向MatGraph结构体的指针,但是在调用该函数前没有为G分配内存空间,所以在G->edges[i][j] = A[i][j]这一行代码中,G指向的内存空间还未被分配,所以会报错。解决方法是在调用CreateGraph()函数前为G分配内存空间,例如可以在test.c文件中加入一行代码:G = (MatGraph*)malloc(sizeof(MatGraph)),用来为G分配内存空间。
由于参考资料并没有给出关于矩阵储存方法的说明,无法根据具体的问题给出解决方案。请提供更多详细信息以便回答问题。