PDA

Voir la version complète : Question de pointeurs...


Schyzophrenic
03/06/2007, 05h18
Bonjour à tous,

J'ai rencontré un problème que je pense avoir résolu, mais je ne comprends absolument pas pourquoi (et donc je ne l'ai peut etre pas résolu... !! :)) Bon je sais pas si je suis clair !! :S

Je m'explique :

J'ai un code assez touffu (mais bien rangé, si si :p). Le code plantait à peu près 2 fois sur 3 et no$GBA m'indiquait que mon code était "unstable" (en appuyant sur F3... D'ailleurs est-ce que quelqu'un sait si l'information qu'il donne est fiable ? )

Je me suis alors plongé dans mon code pour essayer de comprendre. En gros, j'ai mis en commentaire des lignes puis j'ai réduit les lignes commentées jusqu'à trouver celle qui posait souci : c'était une fonction dans laquelle il y avait une boucle while. Jusque la rien d'extraordinaire !
J'initialise un compteur avant la boucle : unsigned char counter = 0 et je boucle tant que le compteur n'a pas atteint une certaine valeur.
Pour une raison cela faisait parfois planté l'appli...

J'ai tenté un truc (je sais même pas pourquoi d'ailleurs ! ) : j'ai remplacé
unsigned char counter = 0;
while (counter<VALUE) {
...
counter++;
}

par
unsigned char * counter = 0
while (*counter<VALUE) {
...
(*counter)++;
}

et là... miracle, je n'ai plus de problème !!! :S

Est-ce que quelqu'un aurait une idée pourquoi cela fait cela ? Est-ce une question de gestion de mémoire ? J'avoue que je n'y comprends pas grand chose !!:hmm:

Merci beaucoup pour votre aide !!!

Schyzophrenic
03/06/2007, 05h41
En fait, je crois que j'ai trouvé et ça me rassure un peu quant à ma compréhension du C++ :)

Dans ma boucle je générais une valeur aléatoire qui prenait une valeur max trop grande de 1... Donc si ça tombait dessus, ça plantait puisque le tableau ne va pas jusque là !!!
J'ai toujours pas bien compris pourquoi ça ne plantait pas lorsque j'utilisais le pointeur, mais au moins j'ai compris pourquoi le programme plantait ! C'est déjà ça ! :)

Par contre, je suis toujours preneur d'une explication sur le pourquoi du comment ça ne plantait pas avec le pointeur :)

magicwp
03/06/2007, 10h29
Salut, alors déjà, avant de faire :

while (*counter < Value)...

test si ton pointeur est correct


if (counter != 0)
{
while (*counter < Value)...
{
}
}

car là tu testes le contenu de la mémoire qui se trouve en adresse 0 :

il faudrait faire :

char mavariable = 0;

char *counter = &mavariable; // on fait pointer le pointeur sur la variable

while (*counter<Value)
{
*counter++; // on incrémenta la variable "mavariable" car le pointeur pointe dessus

}

Schyzophrenic
03/06/2007, 13h24
Effectivement, tu as raison!

J'ai pas bien compris l'intérêt d'un pointeur dans mon cas spécifique (j'utilise les pointeurs avec new sur mes classes en général). J'ai la nette impression que cela ne sert à rien dans mon cas, peux tu confirmer ?
Le pointeur on ne va s'en servir que si l'on souhaite le passer à une fonction, non ?

magicwp
03/06/2007, 20h08
Effectivement, tu as raison!

J'ai pas bien compris l'intérêt d'un pointeur dans mon cas spécifique (j'utilise les pointeurs avec new sur mes classes en général). J'ai la nette impression que cela ne sert à rien dans mon cas, peux tu confirmer ?
Le pointeur on ne va s'en servir que si l'on souhaite le passer à une fonction, non ?


Effectivement :p mais chacun son truc comme on dit :D

Schyzophrenic
03/06/2007, 21h03
Alors on est d'accord ! :)
J'ai plus l'habitude de Java donc les pointeurs je m'y remets tout doucement ! Et là c'était un cas qui dépassait mon entendement :)

Mais bon, comme tu dis chacun son truc! Moi quand je peux faire simple je reste simple :)