2016-05-27 8 views
0

graphのAdjacency Matrixを実装するためのコードを書いていますが、ランタイムエラーが発生しています。グラフの隣接行列

コード:

#include <stdio.h> 
#include <stdlib.h> 
#include <malloc.h> 

struct Graph{ 
    int V; 
    int E; 
    int **Adj; 
}; 

void test(struct Graph *graph) 
{ 
    graph->E = 5; 
    graph->V = 4; 
    graph->Adj = malloc(sizeof(graph->V * graph->V)); 
    graph->Adj[0][0] = 9; 
    graph->Adj[0][1] = 7; 
    graph->Adj[0][2] = 2; 
    graph->Adj[0][3] = 5; 
    printf("Hello %d\n",graph->Adj[0][2]);  
} 
int main() 
{ 
    struct Graph *graph = malloc(sizeof(struct Graph)); 
    test(graph); 
} 

私が主な機能で同じことを行う場合、それworks.I私がテスト関数を記述し、それを行うとき、私が間違っているのかを理解していませんか?メイン関数で行わ

コード:

#include <stdio.h> 
#include <stdlib.h> 
#include <malloc.h> 

struct Graph{ 
    int V; 
    int E; 
    int **Adj; 
}; 


int main() 
{ 
    struct Graph *graph = malloc(sizeof(struct Graph)); 
    graph->E = 5; 
    graph->V = 4; 
    graph->Adj = malloc(sizeof(graph->V * graph->V)); 
    graph->Adj[0][0] = 9; 
    graph->Adj[0][1] = 7; 
    graph->Adj[0][2] = 2; 
    graph->Adj[0][3] = 5; 
    printf("Hello %d\n",graph->Adj[0][2]); 

} 

取得ランタイムerror.Whileデバッグtest functionのためには、それがgraph->Adj = malloc(sizeof(graph->V * graph->V));まで動作しますが、graph->Adj[0][0] = 9;でそれはerror.Whyを与えます?

+0

エラーとは何ですか? – philo

+0

エラーを更新しました。 –

答えて

0

あなたは間違ったmallocを実行しています。あなたはポインタへのポインタを使用しています。したがって、配列ポインタを動的に割り当てるためには、まずmallocを実行する必要があります。次に、すべての行に割り当てる必要があります。

これを試してみてください:

graph->Adj = (int **)malloc(graph->v * sizeof(int *)); 
    for (i=0; i<graph->v; i++) 
     graph->Adj[i] = (int *)malloc(graph->v * sizeof(int)); 
+0

あなたの返事ありがとうございます。私はその方法を知っていますが、私の方法が間違っている理由を知りたいですか? –

+0

答えを –

+0

更新しました。しかし、私は主な機能で同じことをするときに働きます。 –

関連する問題