所以我有一个像这样设置的链表:
#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赋值?
谢谢
杰森
答案 0 :(得分:1)
你说得对,问题是你没有为adjList
中的各个节点分配内存。
当您执行graph->adjList[2]->info = 222;
时,graph->adjList[2]
仍然是NULL
之前的for
循环。
要解决此问题,您需要先为其分配内存,如下所示:
graph->adjList[2] = malloc(sizeof(TNode));
注意:你可能只是在for循环中用graph->adjList[i] = NULL;
替换graph->adjList[i] = malloc(sizeof(Tnode));
,但是随时分配对于提高内存效率非常有用。
答案 1 :(得分:0)
您需要替换
graph-&gt; adjList [i] = NULL;
到
graph-&gt; adjList [i] =(Tnode *)malloc(sizeof(Tnode));