0

所以我有一个像这样设置的链表:

#define MAX 20
//structure for a single linked list
typedef struct element {
    int info;
    struct element *link;
} Tnode;

//structure for a grapgh
typedef struct graphAdjList {
    int nodes;
    Tnode *adjList[MAX];
} Tgraph;

在我的代码中,我将其设置为:

Tgraph *graph;

graph = (Tgraph*) malloc(sizeof(Tgraph));
graph -> nodes = 0;

for(i; i < 20; i++){

    graph->adjList[i]= NULL;
}

graph->adjList[2]->info = 222;

现在,如果我编译它,我会在最后一行遇到访问冲突。是我没有为结构的 Tnode 部分保留内存还是我遗漏了什么。如何初始化数组,以便可以为数组的任何元素中的 info 赋值?

谢谢

杰森

4

2 回答 2

1

你是对的,问题是你没有为adjList.

当你这样做时graph->adjList[2]->info = 222;graph->adjList[2]仍然NULL来自for它之前的循环。

要解决此问题,您需要首先为其分配内存,如下所示:

graph->adjList[2] = malloc(sizeof(TNode));

注意:您可以在 for 循环中替换graph->adjList[i] = NULL;为 with graph->adjList[i] = malloc(sizeof(Tnode));,但随时分配可能有助于提高内存效率。

于 2013-10-01T23:03:36.257 回答
0

你需要更换

图->adjList[i]= NULL;

图->adjList[i] = (Tnode*)malloc(sizeof(Tnode));

于 2013-10-01T23:01:12.220 回答