2017-10-14 3 views
-1

Ich versuche, eine Struktur in ein Array von Strukturen zu kopieren.Kopieren von Strukturen in ein dynamisch zugewiesenes Array von Strukturen

Ich habe eine Graphenstruktur, die ein Feld einer dynamisch zugeordneten Anordnung von Vertices

vlist 

und eine ganzen Zahl Speicher die Anzahl von Eckpunkten in dem vlist genannt hat.

Scheitelpunkte haben ein Namensfeld als ihr inneres Feld. Die Funktion Ich erhalte einen Fehler, nimmt ein Diagramm und eine Zeichenfolge und fügt einen Scheitelpunkt zu diesem Diagramm mit dieser Zeichenfolge als den Namen für den Scheitelpunkt. Hier

ist die Funktion:

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; 
} 

Ich erhalte den Fehler für die Zeile:

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

Fehler:

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

ich dies unter der Annahme, bedeuten, dass ich m Werte in das dynamische Array falsch zu kopieren, aber ich kann nicht herausfinden, warum.

meine Vertex in einer Header-Datei definiert ist als:

typedef struct vertex{ 
    char *name; 
} vertex 

Jede Hilfe bei allen wäre toll, danke!

EDIT:

Definition von Graphen

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

Sie sind schlau darüber, was 'Graph' und' vlist' sind, und ich vermute, 'sizeof (graph -> vlist)' ist die Größe eines Zeigers, nicht die Größe eines Arrays, auf das gezeigt wird. Einfach 'realloc (graph-> vlist, sizeof (graph -> vlist) + sizeof (vertex));' ist falsch. –

+0

Anstatt die Deklaration von 'Graph' in Englisch zu beschreiben, warum werden Sie nicht kopieren und einfügen? – Neo

+0

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

Antwort

1

Das vlist Mitglied ist ein Array von Struktur, kein Array von Zeigern auf Strukturen.

Lösung: Sie vergeben nicht new_vert dynamisch, erklären anstatt es einfach als eine gewöhnliche Struktur:

vertex new_vert; 

Dann sollte es funktionieren.

Denken Sie daran, den Member-Zugriff von -> zu . zu ändern.

+0

Jetzt bekomme ich einen ungültigen Intializer-Fehler in der Zeile, wo ich den Vertex new_vert deklariere; – OoOoOoOoOoO