2017-10-14 6 views
-1

構造体の配列に構造体をコピーしようとしています。構造体を動的に割り当てられた配列の配列にコピー

Iは

vlist 

とVLISTの頂点の数を格納する整数と呼ばれる頂点の動的に割り当てられた配列のフィールドを持つグラフ構造を有しています。

頂点は内部フィールドとして名前配列を持ちます。 エラーが発生する関数は、グラフと文字列を受け取り、その文字列を頂点の名前としてそのグラフに頂点を追加します。ここで

は関数である。

int add_vertex(Graph *graph, const char name[]){ 

if(name && graph){ 

/*Allocating space for new vertex*/ 
vertex *new_vert = malloc(sizeof(vertex)); 

/*Allocating space for vertex name*/ 
    new_vert->name = malloc(strlen(name)+1); 

/*Copying new vertex name to newly allocated vertex*/ 
    strcpy(new_vert -> name, name); 

/*Adding a new space to vertex list*/ 
    graph -> vlist = realloc(graph-> vlist, sizeof(graph -> vlist) + sizeof(vertex)); 
    graph -> num_verts += 1; 
    graph -> vlist[graph->num_verts] = new_vert; 

    return 1; 
} 
else{ 
    return 0; 
} 

私はラインのエラーを取得しています:

graph -> vlist[graph->num_verts] = new_vert; 

エラー:

incompatible types when assigning to type 'vertex' from type 'struct vertex *' 

私はこれは私が「という意味と仮定しています動的配列に値を誤ってコピーしていますが、なぜその理由が分かりません。

私の頂点は次のようにヘッダファイルに定義されています。ありがとうございました、すべてのすべてのヘルプは素晴らしいことだ

typedef struct vertex{ 
    char *name; 
} vertex 

EDIT:グラフ

typedef struct Graph { 
    vertex *vlist; 
    int num_verts; 
} Graph; 
+1

あなたは 'Graph'と' vlist'が何であるかについて心配しています。 'sizeof(graph - > vlist)'は、指し示す配列のサイズではなく、ポインタのサイズです。単純に 'realloc(graph-> vlist、sizeof(グラフ - > vlist)+ sizeof(頂点));は間違っています。 –

+0

'Graph'の解読を英語で説明するのではなく、なぜそれをコピーして貼り付けませんか? – Neo

+0

'graph - > vlist [graph-> num_verts] = * new_vert;'? –

答えて

1

定義vlist部材は構造体の配列ではなく、構造体へのポインタの配列です。

ソリューション:

vertex new_vert; 

そして、それが正常に動作する必要がありますだけではなく、普通の構造として、それを宣言し、動的にnew_vertを割り当てないでください。

メンバーアクセスを->から.に変更することを忘れないでください。

+0

これで、頂点new_vertを宣言している行で無効なintializerエラーが発生しました。 – OoOoOoOoOoO

関連する問題