2015-02-01 2 views
0

Я просто пытаюсь создать связанный список символов. Вот код:Почему эта простая программа связанного списка дает ошибку сегментации?

#include<stdio.h> 
#include<conio.h> 
#include<stdlib.h> 

struct node{ 
    char data; 
    struct node *next; 
}; 

void push(struct node** head,char ndata) 
{ 
    struct node* temp=(struct node*)malloc(sizeof(node)); 
    temp->data=ndata; 
    temp->next=(*head); 
    *head=temp; 
} 

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

    while(temp) 
    { 
     printf("%c ",temp->data); 
     temp=temp->next; 
    } 
} 

int main() 
{ 
    struct node* head; 
    int a=1; 
    push(&head,'a'); 
    push(&head,'b'); 
    push(&head,'c'); 
    push(&head,'b'); 
    push(&head,'a'); 

    display(head); 
    getch(); 
    return 0; 
} 

Я пользуюсь функцией push(), которая вставляет значения на голове. А затем с помощью display() для отображения значений в списке. Когда я запускаю программу, говорит, что «program10.exe перестает работать». Я не понимаю, в чем проблема. Может ли кто-нибудь помочь?

+1

'SizeOf (узел)'? без 'typedef'? как?? –

+0

Я использую компилятор Dev-CPP. Он автоматически «прикрепляет» typedef. – Siddharth

ответ

4

Вы не инициализировали head, поэтому он не имеет значения null, но имеет значение для мусора, поэтому он не останавливает цикл в функции display и пытается там разыменовать мусор.

Это:

struct node* head; 

Должно быть:

struct node* head = NULL; 
+0

Черт. Как я пропустил это? Спасибо друг. – Siddharth

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