[C]Problème de pointeurs
Résolu/Fermé
Nieli
Messages postés
83
Date d'inscription
dimanche 10 février 2008
Statut
Membre
Dernière intervention
23 avril 2009
-
9 avril 2009 à 19:45
Nieli Messages postés 83 Date d'inscription dimanche 10 février 2008 Statut Membre Dernière intervention 23 avril 2009 - 9 avril 2009 à 21:42
Nieli Messages postés 83 Date d'inscription dimanche 10 février 2008 Statut Membre Dernière intervention 23 avril 2009 - 9 avril 2009 à 21:42
A voir également:
- [C]Problème de pointeurs
- Comment faire apparaître le pointeur de la souris - Guide
- Le pointeur de ma souris ne bouge plus ✓ - Forum souris / Touchpad
- Pointeurs - Forum C
- Pointeurs photoshop problème ✓ - Forum Photoshop
- Problème pointeur souris excel - Forum Excel
2 réponses
Bon j'ai pas tout lu mais je vois une erreur de taille:
inserer((void*)5 ,a, 0);
(void*)5 ---> Erreur de manipulation de pointeur, probablement un plantage assuré et pour le moins ce ne sera pas l'effet escompté.
(void*)5 ---> Quelle est la signification? On passe un pointeur dont la valeur est 5, c'est-à-dire que le pointeur désigne la case mémoire n° 5, ce qui ici n'a aucun sens (bien sûr la case n° 5 existe, ça fait partie de la table des pointeurs d'interruption (sauf expert: ne pas toucher, ça brûle !!!)).
Il faut donc écrire quelque chose du genre:
int w=5;
inserer((void*)&w, a, 0);
Mais évidemment il faudra faire attention à ce que le 'w' reste défini sinon il faut plutôt écrire:
int* w;
w = (int*)malloc(sizeof(int));
w = 5;
inserer((void*)w, a, 0);
D'autre part:
a->fils_gauche = (Arbre)inserer_aux(v,&a->fils_gauche,pos);
peut s'écrire plus simplement:
a->fils_gauche = inserer_aux(v,&a->fils_gauche,pos);.
Bon courage
inserer((void*)5 ,a, 0);
(void*)5 ---> Erreur de manipulation de pointeur, probablement un plantage assuré et pour le moins ce ne sera pas l'effet escompté.
(void*)5 ---> Quelle est la signification? On passe un pointeur dont la valeur est 5, c'est-à-dire que le pointeur désigne la case mémoire n° 5, ce qui ici n'a aucun sens (bien sûr la case n° 5 existe, ça fait partie de la table des pointeurs d'interruption (sauf expert: ne pas toucher, ça brûle !!!)).
Il faut donc écrire quelque chose du genre:
int w=5;
inserer((void*)&w, a, 0);
Mais évidemment il faudra faire attention à ce que le 'w' reste défini sinon il faut plutôt écrire:
int* w;
w = (int*)malloc(sizeof(int));
w = 5;
inserer((void*)w, a, 0);
D'autre part:
a->fils_gauche = (Arbre)inserer_aux(v,&a->fils_gauche,pos);
peut s'écrire plus simplement:
a->fils_gauche = inserer_aux(v,&a->fils_gauche,pos);.
Bon courage
Nieli
Messages postés
83
Date d'inscription
dimanche 10 février 2008
Statut
Membre
Dernière intervention
23 avril 2009
6
9 avril 2009 à 21:42
9 avril 2009 à 21:42
Bonsoir(mnt),
Merci de t'être interressé à mon problème.
Mon idée était plutôt de faire quelque chose comme ça
(Tiré de CCM).
Pour pouvoir passer n'importe quel type d'objet.
Sinon, pourrais-tu m'expliquer pourquoi
Arbre *a = (Arbre *)malloc(sizeof(struct Noeud));
printf("Main: %p\n",a);
Arbre *ab = a;
printf("Main: %p\n",&ab);
Pourquoi les adresses sont elles différentes? Je comprends vraiment pas :/
Merci d'avance,
Nieli
Merci de t'être interressé à mon problème.
Mon idée était plutôt de faire quelque chose comme ça
Il est toutefois possible de définir un pointeur sur 'void', c'est-à-dire sur quelque chose qui n'a pas de type prédéfini (void * toto). Ce genre de pointeur sert généralement de pointeur de transition, dans une fonction générique, avant un transtypage permettant d'accéder effectivement aux données pointées
(Tiré de CCM).
Pour pouvoir passer n'importe quel type d'objet.
Sinon, pourrais-tu m'expliquer pourquoi
Arbre *a = (Arbre *)malloc(sizeof(struct Noeud));
printf("Main: %p\n",a);
Arbre *ab = a;
printf("Main: %p\n",&ab);
Pourquoi les adresses sont elles différentes? Je comprends vraiment pas :/
Merci d'avance,
Nieli