2011-08-31 6 views
1

C에서 링크드리스트를 구현하는 법을 배우고 있습니다. 일반적인 링크드리스트의 기본 사항, 값을 추가하는 방법, 어떻게 프린트 할 지 등은 궁금합니다. 연결된 목록의 값으로 다른 구조를 추가 할 수 있습니까?C에서 링크드리스트 내부의 구조

typedef struct personal_info { 
    char *name; 
    char *surname; 
    int phone_number; 
} Info; 

typedef struct llist { 
    Info *info; 
    struct llist *next; 
} List; 

그리고 나는이 작업을 수행 할 때, 내가 어떻게 Info 구조의 값을 액세스합니까 : 내 말은 무엇입니까?

List *l; 
l = malloc(sizeof(List)); 

l->info->name = 'name'; 
l->info->surname = 'surname'; 
l->info->phone_number = 1234567890; 

코드가 충돌하므로 분명히 잘못된 것이 있습니다. 당신은 저에게 그것을 달성하는 방법을 몇 가지 조언을 줄 수 있습니까?

+0

노드에 메모리를 할당 했습니까? (정보 필드) –

+0

Info *에 메모리를 할당해야합니다. –

답변

3

는 또한 정보 구조체를위한 메모리를 할당해야합니다

l = malloc(sizeof(List)); 
l->info = malloc(sizeof(Info)); 

l->info->name = "name"; 
l->info->surname = "surname"; 
l->info->phone_number = 1234567890; 
+0

고마워요! 컴파일러는 나에게 경고를주었습니다 :'경고 : 할당은 캐스팅없이 정수로부터 포인터를 만듭니다' – makos

+0

문자열에 따옴표 (''')를 사용하십시오 .. 아포스트로피는 ** 틀림 ** ** – Marlon

+0

아, 나쁘지! 또 바보 같은 실수. 오전 2시에 코딩하는 것은 좋은 생각이 아닙니다. :) – makos

3
List *l; 
l = malloc(sizeof(List)); 
l->info = malloc(sizeof(Info)); 

당신은뿐만 아니라 구조체에 대한 malloc에 ​​메모리가

또한 당신이 어떤 기능을 구현하는 경우 기억이 목록에서 노드를 제거하려면 노드를 해제하기 전에 해당 구조체를 해제해야합니다.

관련 문제