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;
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. –
Anstatt die Deklaration von 'Graph' in Englisch zu beschreiben, warum werden Sie nicht kopieren und einfügen? – Neo
'graph -> vlist [graph-> num_verts] = * new_vert;'? –