cs_tintin72
Messages postés122Date d'inscriptionmercredi 16 avril 2003StatutMembreDernière intervention22 juillet 2006
-
4 mai 2005 à 11:33
cs_tintin72
Messages postés122Date d'inscriptionmercredi 16 avril 2003StatutMembreDernière intervention22 juillet 2006
-
4 mai 2005 à 19:28
Bonjour,
J'aimerai avoir un petit éclaircissement au sujet des tableaux de structure et des pointeurs.
Au cours du listage d'un tableau de structure, j'ai besoin de connaitre à chaque fois la valeur de l'élément précédent.
J'ai donc écrit un truc comme ça :
if ((pTabStruct - 1)->unElement == 2) ...
Apparement ça marche, mais qd même une chose me tracasse.
Lors du test, le pointeur pTabStruct va décrémenter l'index du tableau de structure de 1 et vérifier la valeur de unElement. Tant que l'index vaut 1, 2, 3 etc, pas de pb, le pointeur pointera toujours sur qq chose de valide. Mais que se passe t-il lorsque l'index est égal à zéro. Cela reviendrait à aller vérifier la valeur de unElement se trouvant dans TabStruct[-1], qui n'existe pas.
Est ce qu'il n'y a pas un risque que le pointeur pointe sur n'importe quoi et génère une erreur ou fasse planter le programme?
MNEMONIC
Messages postés59Date d'inscriptiondimanche 19 décembre 2004StatutMembreDernière intervention 1 septembre 2006 4 mai 2005 à 11:44
Oui, il y a un risque de plantage, et oui, il peut te renvoyer n'importe quoi.
Par contre, je ne sais pas de quoi ça dépend (la différence entre les deux).
Le plantage que j'ai vu le plus souvent est un message "la mémoire ne peut pas être read" ou written dans le cas d'une écriture...
Si je me souviens bien, quand tu travailles avec des pointeurs, c'est à toi de gérer les effets de bord...
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 4 mai 2005 à 13:34
pTabStruct[-1] ???
Faudrait peut etre revoir les bases du C apparement :)
Ici on parle de pointeur et non d'indice de tableau!!!
Faut pas tout mélanger! Dans le cas ou tu essayes de lire le contenu de l'adresse mémoire qui précédent le point de départ de pTabStruct, dans le meilleure des cas tu lira quelques choses qui n'a rien a voir avec ton prog, ou alors le prog plante (dépassement des bords).
Pour corriger ce problème, tu n'as cas sauvegarder l'adresse de départ de pTabStruct, et la comparer à celle en cours.
Ainsi, tu sera si tu es au début de ton tableau ou pas.
Exemple:
MyStruct pTemp[20]; // Pointeur de meme type et de meme taille que pTabStruct
pTemp = pTabStruct;
while( pTemp != pTabStruct)
{
// Ici tu mets ton codes
if ((pTabStruct - 1)->unElement == 2)
{
// Ici l'action a éxécuter
}
}
Voila, sans oublier que ce n'est que le principe de base. Après il faut que tu puisses sortir de la boucle au cas ou tu aurais fini de parcourrir ton tableau.
Plusieurs solutions s'offrent a toi pour cela.
N'hésites pas si tu as des questions.
Shell
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_tintin72
Messages postés122Date d'inscriptionmercredi 16 avril 2003StatutMembreDernière intervention22 juillet 2006 4 mai 2005 à 19:28
Merci pour cette précision ;-)
Je crois que je vais utiliser un truc genre: i = 1 comme mentionné plus haut car en plus ça m'arrange de pas avoir l'indice 0.
Mais ta solution est aussi intéressante et ça peut être une bonne alternative.