chaque fois que j'exécute cette boucle, j'obtiens une erreur de segmentation dans la deuxième itération de la boucle.Obtention d'une erreur de segmentation dans le tri d'une liste chaînée
node *new,*new1;
new=(node*) malloc(sizeof(node));
new1=(node*) malloc(sizeof(node));
new = start->next;
for(;new->next != NULL;new = new->next)
{
for(new1=new->next;new1 != NULL;new1=new1->next)
{ //printf("LOOP\n");
if(new->data > new1->data)
{
printf("\n Swapping - new:%d and new1:%d\n",new->data,new1->data);
temp = (node*) malloc(sizeof(node));
temp1 = (node*) malloc(sizeof(node));
temp1 = new->next;
temp = new1->next;
new->next = temp;
printf("Temp var : %d\n",temp->data);
printf("Temp1 var : %d\n",temp1->data);
new1->next = new;
new1 = new;
new = temp1;
printf("After swapping , new:%d and new1 : %d\n",new->data,new1->data);
// free(temp);
// free(temp1);
}
}
}
Chaque fois que je lui donne une liste - par ex. 4,1,9,6 il échange seulement 4 et 1, quand c'est l'itération à échanger 9 et 6, il montre et la faute de segmentation.
Je vous recommande de prendre le temps de lire [Comment déboguer des petits programmes] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs /) par Eric Lippert, et apprenez comment utiliser un débogueur pour intercepter des plantages comme celui-ci. Cela va au moins vous aider à localiser où dans votre code le crash se produit. L'étape suivante consiste à parcourir votre code, ligne par ligne, dans un débogueur pour déterminer * pourquoi * cela peut arriver. Il y a très probablement un pointeur que vous ne mettez pas à jour correctement ou qui ne s'initialise pas du tout. –
Probablement sans rapport, mais vous perdez de la mémoire (les deux 'malloc's pour' temp' et 'temp1') – UnholySheep
Parler de pointeurs,' new = start-> next; 'conduira à une * fuite de mémoire *. Vous faites d'abord un nouveau point sur un peu de mémoire, puis vous faites pointer vers un autre * autre * mémoire, perdant le pointeur d'origine. Je vous recommande également de lire [cette vieille question et ses réponses] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc), à propos de la conversion du résultat de 'malloc'. –