数据结构中的矩阵储存方法,这里为啥报错?

这里为啥报错?

img


完整代码:
MatGraph.h:

#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分配内存空间。

  • 以下回答由chatgpt基于相关博客总结生成:

    由于参考资料并没有给出关于矩阵储存方法的说明,无法根据具体的问题给出解决方案。请提供更多详细信息以便回答问题。