2016-07-27 3 views
0

При попытке добавить узел в конце связанного списка для каждого введенного пользователем ввода, что-то не так с этим кодом , Я не понимаю, почему это происходит? Может ли кто-нибудь указать, в чем проблема? Если кто-нибудь знает, пожалуйста, предложите мне что-то исправить эту ошибку?Входящий узел со связанными списками каждый раз, когда вводит пользователя, но что-то пошло не так с любым методом

#include <stdio.h> 
//structure with two fields 
struct node 
{ 
    int data; 
    struct node *next; 

}; 
// data type definition 
typedef struct node node; 
//pointer to node which initially set to NULL 
node *head=NULL; 

//fucntion create and display 
void create(int num); 
void display(); 


main() 
{ 
    int n,i,num; 

    printf("enter the no of nodes : "); 
    scanf ("%d",&n); 
    for(i=0;i<n;++i) 
    { 
     printf("enter the data : "); 
     scanf("%d",&num); 
     create(num); 

    } 
    display(); 
} 

// Функция создания

void create(int num) 
{ 
    printf("\n"); 
    if(head==NULL) 
    { 
     node *temp=(node*)malloc(sizeof(node)); 
     temp->data=num; 
     temp->next=head; 
     head=temp; 


    } 

    else 
    { 
     node *temp1=head; 
     while(temp1!=NULL) 
     { 
      temp1=temp1->next; 

     } 

     node *ptr=(node*)malloc(sizeof(node)); 

     ptr->data=num; 
     ptr->next=temp1->next; 
     temp1->next=ptr; 


    } 

} 

// Функция отображения()

void display() 
{ 
    node *temp; 
    temp=head; 

    printf("list is : "); 
    while(temp!=NULL) 
    { 
     printf("%d->",temp->data); 
     temp=temp->next; 

    } 

} 
+0

в функции создания (INT NUM), ваш цикл в то время как делает указатель temp1 земля в NULL (конец списка). После этого temp1-> next = ptr; вызывает ошибку, becau se вы пытаетесь получить доступ к местоположению NULL – JavaHopper

ответ

0

Это должно помочь вам!

void create(int num) 
{ 
    printf("\n"); 
    if(head==NULL) 
    { 
     node *temp=(node*)malloc(sizeof(node)); 
     temp->data=num; 
     temp->next=head; 
     head=temp; 


    } 

    else 
    { 
     node *temp1=head; 
     //Modified the condition to traverse till the last node, not the end of it 
     while(temp1->next != NULL) 
     { 
      temp1=temp1->next; 

     } 

     node *ptr=(node*)malloc(sizeof(node)); 

     ptr->data=num; 
     ptr->next=temp1->next; 
     temp1->next=ptr; 


    } 

} 

(Примечание: могут быть и другие вопросы в программе, я не запускать)

0

Я смотрю на эту часть функции create

node *temp1=head; 
while(temp1!=NULL) 
{ 
    temp1=temp1->next; 
} 

node *ptr=(node*)malloc(sizeof(node)); 

ptr->data=num; 
ptr->next=temp1->next; 
temp1->next=ptr; 

И это, кажется, как вы перебираете список, пока не дойдете до конца. В этот момент temp1 == NULL. Но тогда вы пытаетесь получить доступ к temp1->next, который должен быть в недоступную памяти (помните, что вы только что установили его NULL в предыдущем while-loop.

отладчик может помочь вам с этой ситуацией (или даже печатать информацию вокруг). A широко используется отладчик GDB

. (Примечание: могут быть и другие вопросы в программе, я не запускать)

 Смежные вопросы

  • Нет связанных вопросов^_^