problème de pointeur [C] - C - Programmation
Marsh Posté le 29-04-2004 à 17:36:33
ReplyMarsh Posté le 29-04-2004 à 17:51:59
As-tu bien fait une analyse avant de taper ton code ?
Algo, pseudo-code...
Marsh Posté le 29-04-2004 à 17:59:21
christophe_d13 a écrit : As-tu bien fait une analyse avant de taper ton code ? |
Oui c'est fait. Si c'est mal organiser c'est juste que j'ai extrait 20 lignes sur quelque 1000 lignes.
Marsh Posté le 29-04-2004 à 18:25:53
Dans reflexion, il faut écrire
(*pTabCentre)[1].x
eu lieu
pTabCentre[1]->x
Edit : en fait tu avais du pot avec nbMotif==0 car (*pTabCentre)[0].x est "équivalent" à pTabCentre[0]->x.
pTabCentre, c'est le pointeur sur le tableau donc pTabCentre[1] désigne l'@ mémoire juste après le pointeur qui dans ton cas devait être pTabSouris et c'est pour ça qu'il était modifié...
ou alors, comme tu ne modifie pas pTabCentre, tu définie Reflexion comme :
void Reflexion( int nbMotif, fPoint *pTabCentre )
dedans, tu utilises des
pTabCentre[0].x
et tu appelles
Reflexion( nbMotif, *pTabCentre );
Ce bout de code me rappelle mes débuts en C
Essayes quand même de limiter au maximum les truc du genre ***, c'est pas gérable en fait.
Par exemple écrit une fonction pour allouer tabSouris une autre pour
tabCentre.
Ton main deviendrait :
static fPoint *tabCentre, **tabSouris;
tabClentre = alloueTabCentre();
tabSouris = alloueTabSouris();
Reflexion( nbMotif, tabSouris );
Marsh Posté le 29-04-2004 à 18:33:07
cherche pas regarde ta fonction alloc et regarde la valeur de tes variables
Marsh Posté le 29-04-2004 à 18:45:35
fFluFf a écrit : cherche pas regarde ta fonction alloc et regarde la valeur de tes variables |
ça a l'air d'être bon, non ?
Marsh Posté le 29-04-2004 à 19:19:37
Code :
|
Question : quel est la valeur de nbMotif
Autre question :
Code :
|
réponse aucune
Marsh Posté le 29-04-2004 à 19:22:53
fFluFf a écrit :
|
Marsh Posté le 29-04-2004 à 19:39:13
du code simplifié :
Comment tu veux qu'on lui dise ou est l'erreur si il donne pas tout. Pour moi c'est pas du code simplifié.
ah bon et c'est quoi la différence ?
dans pTabCentre[1]->x :
pTabCentre[1] est un pointeur donc on accede à son attribut avec une "->"
(*pTabCentre[1]) est un objet (pas un pointeur) donc on accède à son attribut avec un "."
donc si je comprends bien pour toi
fpoint *p = malloc(sizeof(fpoint));
p->x = 3; et
(*p).x = 3
sont différent ?
Marsh Posté le 30-04-2004 à 09:33:58
fFluFf a écrit : du code simplifié : |
il a écrit que c'était simplifié et il donne juste les lignes de son programme qui foirent + allocation de ses tableaux.
fFluFf a écrit : |
Je crois que tu n'as pas bien lu sa fonction. Si je schématise, on a ça :
Code :
|
J'espère que mes explications ne sont pas trop
fFluFf a écrit : |
Ben non identiques et il n'y a pas de contradiction...
Marsh Posté le 30-04-2004 à 15:54:11
Code :
|
Code :
|
no comment.
Cependant pendant l'écriture de ce programme j'ai rencontré quels "trucs" bizard :
Code :
|
je n'ai rien changé à l'algo sauf que j'ai enlevé :
- la création de pTabCentre
- enlevé nbMotif
- remplacé nbMotifpar nbSouris
- (et bien sur enlevé les casts inutiles)
Marsh Posté le 30-04-2004 à 16:33:37
Je crois que tu n'as toujours lu pas sa fonction.
Tu fais ça :
|
au lieu de ça :
|
Un exemple :
Code :
|
Et j'ai jamais dis que tab[0]->y était différent de (*tab[0]).y (comme tu sembles le suggérer avec ton exemple)
mais que (*tab)[1].x est différent de tab[1]->x
Marsh Posté le 30-04-2004 à 18:32:43
Autant pour moi j'ai cru depuis le début qu'il appelé reflexion sur ptabSouris et non ptabCentre.
encore désolé mais ca n'explique pas le :
for( i = 0; i < *pNbMotif; i++ ) ...
Marsh Posté le 29-04-2004 à 17:29:51
Bonjour,
Voici le code interressant:
J'ai simplifier au maximum. Dans un premier temps, j'appelle la fonction avec nbMotif égal à 1: tout va bien mais losque je recommence (je désallou tout auparavant) avec nbMotif égale à 2, sa segfault!
J'ai réussi a voir que l'adresse de *pTabSouris[0] a changer juste aprés TabCentre[1]->x = centre.x.
Je pense qu'il y a un problème d'écrasement mais je ne vois pas où!
Merci de votre aide