将结构复制到动态分配的结构数组中

时间:2017-10-14 18:01:43

标签: c arrays pointers malloc realloc

我试图将结构复制到结构数组中。

我有一个图结构,其中包含一个动态分配的顶点数组的字段,名为

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

我认为这意味着我将错误的值复制到动态数组中,但我无法弄清楚原因。

我的Vertex在头文件中定义为:

typedef struct vertex{
  char *name;
} vertex

任何帮助都会很棒,谢谢!

编辑:

图表的定义

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

1 个答案:

答案 0 :(得分:1)

vlist成员是一个结构数组,而不是结构指针数组。

解决方案:不要动态分配new_vert,而只是将其声明为普通结构:

vertex new_vert;

然后它应该可以正常工作。

请务必将会员访问权限从->修改为.