2017-10-14 93 views
-1

我试图将结构复制到结构数组中。将结构复制到动态分配的结构数组中

我有一个具有顶点的动态分配的数组称为

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 *' 

我假设这意味着我” m错误地将值复制到动态数组中,但我无法弄清楚原因。

我的顶点在头文件中定义为:

typedef struct vertex{ 
    char *name; 
} vertex 

任何帮助都将是巨大的,谢谢!

编辑:

图表

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

对于Graph和vlist是什么,我怀疑sizeof(graph - > vlist)是指针的大小,而不是指向的数组的大小。显然'realloc(graph-> vlist,sizeof(graph - > vlist)+ sizeof(vertex));'是错误的。 –

+0

为什么不复制和粘贴它,而不是用英文描述'Graph'的删除? – Neo

+0

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

回答

1

vlist构件的定义是结构的阵列,而不是指针数组到结构。

解决方法:不要分配new_vert动态,而不是仅仅宣布它作为一个普通的结构:

vertex new_vert; 

那么它应该工作的罚款。

请记住修改成员访问从->.

+0

现在我在声明顶点new_vert的行上得到一个无效的初始化错误; – OoOoOoOoOoO