2017-10-14 7 views
-1

구조체를 구조체 배열에 복사하려고합니다.동적으로 할당 된 구조체 배열에 구조 복사

제가

vlist 

및 VLIST 정점의 수를 저장하는 정수라고 정점의 동적으로 할당 된 어레이의 필드를 갖는 그래프 구조를 갖는다.

Vertices는 내부 필드로 이름 배열을가집니다. 오류가 발생하는 함수는 그래프와 문자열을 취해 해당 문자열을 정점 이름으로 사용하여 해당 그래프에 정점을 추가합니다.

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

오류 : :이 있으리라 믿고있어

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

내가 '것을 의미

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

내가 라인에 대한 오류를 얻고있다 : 여기

는 기능입니다 동적 배열에 값을 잘못 복사하는 이유를 알 수 없습니다.

내 정점이 같은 헤더 파일에 정의되어

typedef struct vertex{ 
    char *name; 
} vertex 

이 어떤 도움이 전혀 좋은 것입니다, 감사합니다!

편집 : 그래프

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

당신은'Graph'와'vlist'가 무엇인지에 대해 냉담하며'sizeof (graph -> vlist)'는 가리키는 배열의 크기가 아니라 포인터의 크기라고 생각합니다. 평범하게'realloc (그래프 -> vlist, sizeof (그래프 -> vlist) + sizeof (꼭지점)); –

+0

'Graph'의 해독을 영어로 설명하는 대신, 왜 복사하여 붙여 넣지 않습니까? – Neo

+0

'그래프 -> vlist [그래프 -> num_verts] = * new_vert;'? –

답변

1

vlist 부재

정의 구조 포인터 배열 구조의 배열이 아니다.

해결 방법 : 대신 그냥 평범한 구조로 선언, 동적 new_vert를 할당하지 마십시오

vertex new_vert; 

그런 다음 그것을 잘 작동합니다.

->에서 .으로 member-access를 수정해야합니다.

+0

이제 정점 new_vert를 선언 한 행에 잘못된 intializer 오류가 발생합니다. – OoOoOoOoOoO