Erreur de segmentation inconnue

Erreur de segmentation inconnue - C++ - Programmation

Marsh Posté le 09-05-2019 à 22:13:37    

Bonsoir,
 
Depuis plusieurs jours, je peine à réaliser une structure de liste chaînée basique en C++.
J'ai tout tenté, mais systématiquement j'obtiens une erreur de segmentation....
D'après gdb, elle se produirait à la ligne 25 ci-dessous mais je ne comprends pas pourquoi...
 

Code :
  1. #include <iostream>
  2. struct Noeud {
  3. int valeur;
  4. Noeud *noeud_suivant;
  5. };
  6. struct Liste {
  7. Noeud *tete_de_liste;
  8. };
  9. int main() {
  10. Liste *liste;
  11. Noeud *noeud;
  12. noeud->valeur = 20;
  13. noeud->noeud_suivant = nullptr;
  14. liste->tete_de_liste = noeud;
  15. }


 
Je suis sûr qu'il s'agit d'une erreur toute bête mais plusieurs jours de réflexion ne m'ont pas aidé à l'identifier...
Merci par avance pour votre aide

Reply

Marsh Posté le 09-05-2019 à 22:13:37   

Reply

Marsh Posté le 09-05-2019 à 23:18:19    

Il semblerais que tu ais oublier d'allouer de la mémoire à tes pointeurs, à mon avis ça devrais même planter à la ligne 24 mais t'as juste eu de la chance.

Reply

Marsh Posté le 10-05-2019 à 10:28:10    

chef_keeper a écrit :

Il semblerais que tu ais oublier d'allouer de la mémoire à tes pointeurs, à mon avis ça devrais même planter à la ligne 24 mais t'as juste eu de la chance.


Merci pour ta réponse. Comment pourrais-je modifier mon code du coup pour que ça fonctionne ? Merci


---------------
Étudiant, passionné par l'informatique. Mon site internet : https://www.sachifus.com
Reply

Marsh Posté le 10-05-2019 à 11:56:00    

Sachifus a écrit :


Merci pour ta réponse. Comment pourrais-je modifier mon code du coup pour que ça fonctionne ? Merci


 
il faut allouer la mémoire.
 
Voici comment allouer ( et désallouer après ).
 

Code :
  1. #include <iostream>
  2. struct Noeud {
  3. int valeur;
  4. Noeud *noeud_suivant;
  5. };
  6. struct Liste {
  7. Noeud *tete_de_liste;
  8. };
  9. int main() {
  10. Liste *liste = new Liste();
  11. Noeud *noeud = new Noeud();
  12. noeud->valeur = 20;
  13. noeud->noeud_suivant = nullptr;
  14. liste->tete_de_liste = noeud;
  15. delete noeud;
  16. delete liste;
  17. }


 
 

Reply

Marsh Posté le 10-05-2019 à 12:52:14    

En 2019, on preferera utiliser std::unique_ptr pour gérer la durée de vie des données dynamiques plutot que new et delete

Reply

Marsh Posté le 10-05-2019 à 23:32:19    

Merci beaucoup à tous pour vos réponses !  
 
Bonne soirée :)


---------------
Étudiant, passionné par l'informatique. Mon site internet : https://www.sachifus.com
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed