2014-09-21 2 views
0
#include <stdio.h> 
#include <stdlib.h> 

struct Node{ int Element; struct Node* Next;}; 

int main(){ 

struct Node *header=NULL; 
struct Node *ptr; 

Création de la liste chaînée iciCe code me donne une erreur de segmentation (Core Dump). Je ne comprends pas très bien pourquoi?

ptr=header; 
ptr->Next=NULL; 
int x; 
printf("Input the elements. End with zero.\n"); 
scanf("%d", &x); 

int c=0;//Counter 

lecture de chaque élément

while(x!=0) 
{ 
    if(c==0) 
    { header=(struct Node*)malloc(sizeof(struct Node));  
    ptr=header; 
    ptr->Element=x; 
    c++; 
    scanf("%d", &x); 
    } 
    else 
    { ptr->Next=(struct Node*)malloc(sizeof(struct Node)); 
ptr=ptr->Next; 
ptr->Element=x; 
ptr->Next=NULL; 
c++; 
scanf("%d", &x); 
    } 
} 

printf("/n"); 

struct Node *temp; 

if(header==NULL) 
printf("List is empty.\n"); 
else 
{ 
for(temp=header;temp!=NULL;temp=temp->Next) 
{printf("%d\n", temp->Element);} 
} 

Ici j'imprime la liste.

} 

Aussi, je ne comprends vraiment pas des erreurs de segmentation du tout. Pourquoi dit-on simplement "Erreur de segmentation: core dump" plutôt que de nous donner plus de détails?

+6

Compile avec toutes les informations d'avertissement et de débogage ('gcc -Wall -g'). Apprenez ensuite à ** utiliser le débogueur ** ('gdb'). Comprendre ce qu'est [comportement indéfini] (http://en.wikipedia.org/wiki/Undefined_behavior) –

+0

étape dans votre débogueur. –

+0

Lire aussi des wikipages sur [défaut de segmentation] (https://en.wikipedia.org/wiki/Segmentation_fault), [mémoire virtuelle] (https://en.wikipedia.org/wiki/Virtual_memory), [espace d'adressage] (https://en.wikipedia.org/wiki/Address_space). BTW vous voulez 'printf (" \ n ")' pas 'printf ("/n ")'! –

Répondre

1

Vous définissez ptr NULL:

ptr=header; 

Ensuite, vous essayez de NULL déréférencer. Cette ligne se bloque:

ptr->Next=NULL; 

Fix votre logique.

+1

La réponse est correcte, mais je ne suis pas sûr que ce soit vraiment utile pour un débutant. L'OP (Steve) aurait dû trouver ça tout seul. –

+1

Oui, s'il vous plaît ne répondez pas à ces questions. Le SO est complètement affaibli par de telles questions, ce qui sape l'objectif de ce site d'être une base de connaissances interrogeable. –

+0

Ouais - presque toujours des listes de liens, presque toujours de mauvais déréférencement, presque toujours aucune tentative de déboguer du tout. –

Questions connexes