所以我有一个这样的链表:
#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 部分保留内存还是我错过了什么。如何初始化数组,以便可以为数组的任何元素中的信息赋值?
谢谢
杰森
对的,问题是你没有为adjList
中的各个节点分配内存。
当你执行graph->adjList[2]->info = 222;
时,graph->adjList[2]
仍然从它前面的for
循环中NULL
。
要解决此问题,您需要首先为其分配内存,如下所示:
graph->adjList[2] = malloc(sizeof(TNode));
注意:您可以在 for 循环中将graph->adjList[i] = NULL;
替换为graph->adjList[i] = malloc(sizeof(Tnode));
,但随用而分配对于内存效率很有用。
您需要替换
graph->adjList[i]= NULL;
自
graph->adjList[i] = (Tnode*)malloc(sizeof(Tnode));