Récemment, j'ai pratiqué quelques questions de codage de listes chaînées. Je viens de commencer à utiliser unordered_set. La question est, "Écrire du code pour supprimer les doublons d'une liste chaînée non triée". J'ai utilisé unordered_set pour cela. Mais j'ai le problème de "coredump" quand j'essaye d'initialiser la liste liée.Core jeté lors de l'exécution d'une opération de liste chaînée dans "CodePad" (qui est un compilateur C++ en ligne)
Il affiche le tableau lorsque je commente les 3 dernières lignes de populateList. Il affiche core core quand je tente d'accéder à la tête dans populateList.
C'est l'intégralité du code que j'ai écrit. J'ai écrit ceci dans le site Web de codepad.
#include <iostream>
#include<vector>
#include<string.h>
#include<math.h>
#include<sstream>
#include<string>
#include<stdio.h>
#include<algorithm>
#include<unordered_set>
using namespace std;
struct Node
{
int data;
Node *next;
};
Node *head=NULL;
void populateList(Node *head)
{
int arr[]={7,1,2,3,4,5,4,3,5,7,3,9,3,7,3,6,2,5,7,4};
cout<<"\n\n";
int n=sizeof(arr)/sizeof(int);
for(int i=0;i<n;i++)
{
cout<<arr[i]<<" ";
}
Node *ptr=head;
Si je commente le contenu de la boucle for ci-dessous, tout se passe bien.
for(int i=0;i<n;i++)
{
ptr->data=arr[i];
ptr->next=NULL;
ptr=ptr->next;
}
}
int main()
{
Node *ptr=head, *prev=head;
populateList(head);
unordered_set<int> A;
while(ptr!=NULL)
{
cout<<ptr->data<<" ";
}
while(ptr!=NULL)
{
if(A.find(ptr->data)==A.end())
{
A.insert(ptr->data);
}
else
{
prev->next=ptr->next;
delete ptr;
ptr=prev->next;
}
prev=ptr;
ptr=ptr->next;
}
ptr=head;
cout<<"\n\n";
while(ptr!=NULL)
{
cout<<ptr->data<<" ";
}
return 0;
}
Il y a un manque suspect de 'nouveau' dans ce code. – molbdnilo
Vous appelez 'populateList (head)' où 'head == NULL', alors allez-y et déréférencer ce pointeur' NULL' avec 'head-> data = ...;' –
Mettre le contenu des commentaires précédents en d'autres mots : vous n'allouez pas les noeuds de liste en utilisant l'opérateur 'new'. – Fureeish