CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

C++ liste chainée

totodu91
totodu91
Niveau 8
16 janvier 2013 à 19:57:52

Bonsoir,

j'ai un soucis au niveau d'une fonction qui compte le nombre d'element dans ma liste chainée.
Ma fonction est la suivante:
int CountListNode( ListNode* node )
{
int result = 0;
while(node->m_next!=NULL)
{
result++;
node=node->m_next;
}
return result;
}

Quand j'execute mon code, je n'ai pas d'erreur a la compilation mais quand ma console s'ouvre elle plante.
Savez vous d'ou vient le probleme?

Merci d'avance.

godrik
godrik
Niveau 30
16 janvier 2013 à 20:02:41

node pourrait deja etre NULL en entrant dans la fonction.

totodu91
totodu91
Niveau 8
16 janvier 2013 à 20:06:52

Il ne planterait pas il renverrait 0.
Dans mon main je fais :

ListNode node1(1);
ListNode node2(2);
ListNode node3(3);

node1.m_next = &node2;
node2.m_next = &node3;

PocoIo
PocoIo
Niveau 10
16 janvier 2013 à 20:10:32

Est-ce que m_next est bien mit à 0 par défaut dans le constructeur? Sinon essaye de mettre le m_next de node3 à 0.

godrik
godrik
Niveau 30
16 janvier 2013 à 21:12:48

si tu pass NULL a la fonction, ca plantera.

donnes un code complet.

totodu91
totodu91
Niveau 8
16 janvier 2013 à 22:17:03

Voila mon programme final:

  1. include <stdio.h>
  2. include <tchar.h>
  3. include <assert.h>
  4. include <process.h>
  5. include <cstdlib>
  6. include <iostream>

using namespace std;
class ListNode
{
public:
ListNode(int value){}
int m_value;
ListNode* m_next;
};

int CountListNode( ListNode* node )
{
int result = 0;

while(node->m_next!=NULL)
{
result++;
node=node->m_next;
}

return result+1;
}

ListNode* ReverseList( ListNode* node )
{
ListNode *tmp = NULL;
ListNode *result=NULL;

while(node!=NULL)
{
tmp=node;
node=tmp->m_next;
tmp->m_next=result;
result=tmp;
}
return result;
}

void afficherListe(ListNode* node)
{
ListNode*tmp = node;
while(tmp != NULL)
{
printf("val = %d et adresse du suivant = %d\n",tmp->m_value, tmp->m_next);
tmp = tmp->m_next;
}
printf("\n");
}

int main()
{
printf("List Test:\n");

ListNode node1(1);
ListNode node2(2);
ListNode node3(3);

node1.m_next = &node2;
node2.m_next = &node3;
node3.m_next = NULL;

afficherListe(&node1);
ListNode *reverted = ReverseList(&node1);

return 0;
}

J'ai réglé mon soucis de console qui plante.
Mais il me semble qu'il m'affiche les adresse avec afficher liste pourtant j'avais déja bosser sur un tp du genre et j'avais pas de soucis ca me retournais bien des entiers dans m_value.

totodu91
totodu91
Niveau 8
16 janvier 2013 à 22:29:19

Ha c'est bon j'ai rien dit. J'ai réussi a me corriger tout seul j'avais oublier le constructeur.....
Merci tout de meme.

kufa
kufa
Niveau 9
18 janvier 2013 à 00:26:36

Comme le dis Godrik, le cas node==0 va te faire planter ton code.
Ta boucle while serait mieux en
while( node ) { ++result; node = node->m_next; }

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment