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

时间:2013-10-01 22:57:20

标签: arrays data-structures linked-list initialization

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

#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赋值?

谢谢

杰森

2 个答案:

答案 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));