Salut!
voila, je suis en train de coder un biblio pour les liste, piles, files, arbres et graphs, mais sur les liste simples, il y'a un problème, voila le code:
#include<stdio.h>
usingnamespace std;
struct element
{
int data;
element* nxt;
};
void addHead(element* liste, int val)
{
element* ele = new element;
ele->data=val;
ele->nxt=liste;
liste=ele;
}
void printl(element* liste)
{
element* ptr = liste;
cout<<ptr<<endl;
while(ptr!=NULL)
{
cout<<ptr->data;
ptr=ptr->nxt;
}
}
int main()
{
element* liste=NULL;
for(int i=0; i<10; i++)
{
addHead(liste,i);
}
printl(liste);
return0;
}
Bon, ce qui se passe, c'est que rien ne saffiche après l'appel à la fonction printl, et j'ai ajouté la ligne
cout<<ptr<<endl;
pour verifier l'adresse contenue par ptr après lui avoir affecté liste, et elle contient 0!, alors que je lui ai affécté l'adresse de ele!
Merci de bien vouloir eclairer ce point sombre qui me tracasse depuis deux jours!
merci d'avance.
La maîtrise des fondamentaux est le fondamental de la Maîtrise.
Pour modifier l'adresse de la liste a l'interieur de ta fonction addHead, tu dois passer en parametre l'adresse du pointeur de tete de liste (comme tu le ferais avec une variable classique).
Dans ta fonction tu ne fais que modifier le pointeur "local" de la tete de liste !
Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
Il y a des trucs qui sont importants. 0 vs NULL ne l'est pas.
Il y a une famille de gurus qui milite pour 0, une autre famille (de vrais gurus toujours) qui milite pour un truc sémantiquement plus explicite (NULL).
Finalement, on aura (C++0x) un nullptr (ou nilptr, je ne sais plus).
C'est beau fissal_houate mais c'est une implémentation très C d'une file que tu nous a montrer...
Ce n'est pas tout les compilateurs qui initialise les pointeurs à 0 alors le pointeur nxt ne vaut pas nécessairement 0 alors tu risque la boucle infinie.
Pour ce qui est du NULL, c'est un question qui revient à tout les topics oû il n'y a que l'ombre d'un pointeur : moi je suis pour le 0 parce que je trouve que c'est tout simplement propre et que ça ne cache rien derrière un vieux #define.
en C++ NULL vaut 0
en C NULL vaut (void*)0
Imaginez la difficulté pour un Zér0 qui débute de découvrir pourquoi ça ne fonctionnera pas, que ce ne sera pas la fonction avec le pointeur qui sera appelée :
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
La maîtrise des fondamentaux est le fondamental de la Maîtrise.
La maîtrise des fondamentaux est le fondamental de la Maîtrise.
La maîtrise des fondamentaux est le fondamental de la Maîtrise.