我正在编写一个用于实现图形的Adjacency Matrix的代码。但是我收到运行时错误。任何人都可以建议我错在哪里?
代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct Graph{
int V;
int E;
int **Adj;
};
void test(struct Graph *graph)
{
graph->E = 5;
graph->V = 4;
graph->Adj = malloc(sizeof(graph->V * graph->V));
graph->Adj[0][0] = 9;
graph->Adj[0][1] = 7;
graph->Adj[0][2] = 2;
graph->Adj[0][3] = 5;
printf("Hello %d\n",graph->Adj[0][2]);
}
int main()
{
struct Graph *graph = malloc(sizeof(struct Graph));
test(graph);
}
如果我在主要功能中做同样的事情就行了。我在编写测试功能时不明白我做错了什么?
在main函数中完成代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct Graph{
int V;
int E;
int **Adj;
};
int main()
{
struct Graph *graph = malloc(sizeof(struct Graph));
graph->E = 5;
graph->V = 4;
graph->Adj = malloc(sizeof(graph->V * graph->V));
graph->Adj[0][0] = 9;
graph->Adj[0][1] = 7;
graph->Adj[0][2] = 2;
graph->Adj[0][3] = 5;
printf("Hello %d\n",graph->Adj[0][2]);
}
获取运行时错误。对test function
进行调试时,它会一直运行到graph->Adj = malloc(sizeof(graph->V * graph->V));
,但在graph->Adj[0][0] = 9;
它会出错。为什么???
答案 0 :(得分:0)
你做错了malloc。您正在使用指向指针的指针。因此,您必须首先使用malloc来动态分配数组指针。然后你必须为每一行分配它。
试试这个:
graph->Adj = (int **)malloc(graph->v * sizeof(int *));
for (i=0; i<graph->v; i++)
graph->Adj[i] = (int *)malloc(graph->v * sizeof(int));