2013-02-07 3 views
0
#include<stdio.h> 
struct node 
{ 
    int item; 
    struct node *link 
}; 

main() 
{ 
    struct node *start,*list; 
    int i; 
    start = (struct node *)malloc(sizeof(struct node)); 
    list = start; 
    start->link = NULL; 
    for(i=0;i<10;i++) 
    { 
     list->item = i; 
    list->link = (struct node *)malloc(sizeof(struct node)); 
    } 
    list->link = NULL; 
    while(start != NULL) 
    { 
     printf("%d\n",start->item); 
    start = start->link; 
    } 
} 

을 순회. . 및 관찰 된 출력 : 9 코드에 문제가 있습니까?링크 된 목록을

+2

을 당신은 잊었 메모리를 할당 for 루프를 한 번 더 문 '목록을 추가 = 목록 -> link' – Raj

답변

3

코드에있는 문 하나 때문일 수 있습니다. 새 링크를 할당하려고 할 때 다음 링크를 가리키는 것을 잊었습니다. 때문에 하나의 포인터에서만 할당하므로 메모리 누수가 발생합니다.

#include<stdio.h> 
struct node 
{ 
    int item; 
    struct node *link 
}; 

main() 
{ 
    struct node *start,*list; 
    int i; 
    start = (struct node *)malloc(sizeof(struct node)); 
    list = start; 
    start->link = NULL; 
    for(i=0;i<10;i++) 
    { 
     list->item = i; 
     list->link = (struct node *)malloc(sizeof(struct node)); 
     list = list->link; 
    } 
    list->link = NULL; 
    while(start != NULL) 
    { 
     printf("%d\n",start->item); 
     start = start->link; 
    } 
} 
+0

감사 그것은 일 회신 : – user1905568

5

당신은 당신이 그것을 만든 후 다음 노드에서 list을 가리키는되지 않습니다, 그래서 당신은 바로 이전 노드마다 덮어 쓰기하고 있습니다. 이 시도 : 당신의

for(i=0;i<10;i++) 
{ 
    list->item = i; 
    list->link = (struct node *)malloc(sizeof(struct node)); 
    list = list->link; 
} 
+0

을 위해! 답장을 보내 주셔서 감사합니다 :) – user1905568

관련 문제