初始化错误误解..需要一些澄清



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

#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));

相关内容

  • 没有找到相关文章

最新更新