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 部分にメモリを予約していないのでしょうか、それとも何か不足していますか。配列の任意の要素の情報に値を割り当てることができるように、配列を初期化するにはどうすればよいですか?

ありがとうございました

ジェイソン

4

2 に答える 2

1

その通りです。問題は、 の個々のノードにメモリを割り当てていないことですadjList

あなたがするときgraph->adjList[2]->info = 222;、それgraph->adjList[2]はまだその直前NULLのループからです。for

これを修正するには、まず次のようにメモリを割り当てる必要があります。

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

注: for ループ内でwithを置き換えることもできますが、メモリ効率を高めるためには、割り当てを行うと便利です。graph->adjList[i] = NULL;graph->adjList[i] = malloc(sizeof(Tnode));

于 2013-10-01T23:03:36.257 に答える
0

交換する必要があります

グラフ->adjList[i]= NULL;

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

于 2013-10-01T23:01:12.220 に答える