TD6 - EX16

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu TD6 - EX16

Message  Aftab007 le Dim 14 Nov 2010, 17:00

Hello : )

Voila jai à nouveau un probleme de segmentation fault .
via le debuger je sais que sa plante lorsque j'essaye de recupèrer la valeur du UCHAR

Voici le debut du code =>

Code:


void charByChar() {
   void * zoneMemoire = NULL;
   int offset;

   char charOffsetCaracter;
   short shortOffsetCaracter;
   float floatOffsetCaracter;

   UCHAR valeurOctet;
   void * ptrDeplacement = NULL;

   zoneMemoire = getTexte05();

   ptrDeplacement = (int*) zoneMemoire;
   offset = *(int *) ptrDeplacement; /*recup du 1er Offset*/
   ptrDeplacement = (int *) ptrDeplacement + offset; /* deplacement vers la 1ere Seq*/

   while (offset != 0) {
      valeurOctet = *(UCHAR*) ptrDeplacement;
                         
                    juste après il plante
( la suite du code c'est un switch qui me permet de traiter  les trois cas different ( char float short) )

valeurOctet = *(UCHAR*) ptrDeplacement;

JE pensse que la syntaxe est bonne je demande de recupèrer la valeur pointer par un UCHAR, je ne vois vraiment pas pkoi il plante a cette endroit Sad
Merci de votre aide


Dernière édition par Aftab007 le Mer 17 Nov 2010, 19:50, édité 1 fois

Aftab007

Nombre de messages : 85
Age : 28
Prénom : Aftab
Date d'inscription : 27/11/2008

Revenir en haut Aller en bas

resolu Re: TD6 - EX16

Message  smb le Dim 14 Nov 2010, 18:30

Un offset est un déplacement en byte pris à partir d'une certaine adresse.

Quand tu fais ptrDeplacement = (int *) ptrDeplacement + offset; tu fais jouer l'arithmétique des pointeurs sur l'adresse d'un int puisque tu fais un casting (int *) ptrDeplacement.

Fais plutôt le casting suivant (char *)ptrDeplacement avant d'ajouter l'offset. Tu verras que ça ira mieux!

Neutral

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

resolu Re: TD6 - EX16

Message  Aftab007 le Lun 15 Nov 2010, 07:46

merci maintenant il recupere bien la valeur de l' USHAR Smile
Mais sa plante plu bas , jvais y reflechir , bonne journée

Aftab007

Nombre de messages : 85
Age : 28
Prénom : Aftab
Date d'inscription : 27/11/2008

Revenir en haut Aller en bas

resolu Re: TD6 - EX16

Message  Aftab007 le Mer 17 Nov 2010, 18:56

Bonssoir ,

Après quelques jours de chipotage je parvient enfin à afficher qu une seule lettre soit le " L " ou le "I",
et parfois une segmentation fault ... Sad


Spoiler:

Code:

while (offset != 0) {
      valeurOctet = *(UCHAR*) ptrDeplacement;
      ptrDeplacement = (UCHAR*) ptrDeplacement + 1; /*Pointe sur position du char*/

      switch (valeurOctet) {

      case 1:

         position = *(char*) ptrDeplacement;
         ptrDeplacement = (char*) ptrDeplacement + 1;/* Pointe vers l'adresse de la chaine*/
         tabCaractere = *(char**) ptrDeplacement;
         printf("%c", tabCaractere[position]);

         break;
                        case 2:

                        case 3: le code est le meme sauf que je transtype en fonction du type

                    }
   }

      ptrDeplacement = (const char **) ptrDeplacement + 1;
      offset = *(int *) ptrDeplacement;
      ptrDeplacement = (char *) ptrDeplacement + offset;
   }
   
   free(zoneMemoire);
}



Après un premier passage dans le switch tous va bien , c est au second tour de boucle ( while) que valeurOctet n' est pas correcte.
Je suis presque sur que je fais qq chose de mal après mon switch , lorsque je manipule ptrDeplacement.
Mais je ne parvien pas a mettre le doit dessus.
Si vous seriez m' eclairer. merci bien

Aftab007

Nombre de messages : 85
Age : 28
Prénom : Aftab
Date d'inscription : 27/11/2008

Revenir en haut Aller en bas

resolu Re: TD6 - EX16

Message  smb le Mer 17 Nov 2010, 19:10

Je crois que l'erreur vient de la fin de ton traitement d'une séquence, plus exactement :

ptrDeplacement = (char *) ptrDeplacement + offset;

comme le dit l'énoncé, l'offset doit être ajouté à l'adresse du début de la séquence !!!

affraid

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

resolu Re: TD6 - EX16

Message  Aftab007 le Mer 17 Nov 2010, 19:50

Super ! Mon texte s affiche correctement :p

Mais franchement j ai intérêt à lire plus attentivement mes ennoncés.
Aller je vais de ce pas lire l' énoncé du dernières exercices .

merci

Aftab007

Nombre de messages : 85
Age : 28
Prénom : Aftab
Date d'inscription : 27/11/2008

Revenir en haut Aller en bas

resolu Re: TD6 - EX16

Message  Contenu sponsorisé Aujourd'hui à 01:05


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum