char traité comme un short

char traité comme un short - C++ - Programmation

Marsh Posté le 09-12-2004 à 10:31:14    

bonjour tout le monde,
 
alors voila, je suis tombée sur un comportement que j'aimerai comprendre.  
j'ai une variable du type char qui est traitée comme un short dans une de mes fonctions...
 
voila la fonction où le schlimblick se passe:

Code :
  1. void DetachAll (short* tab,char* tytab)
  2. {
  3. for (int i=0; i<DB_ELT_TY_LIST; i++)
  4. {
  5.  if (tab[i] != NULL) blabla...
  6.  tab[i] = NULL;
  7. }
  8. *tytab = 0; // là tytab est traité comme un short et non char ???
  9. }


 
voila la definition de ma variable:

Code :
  1. char *_maxTM   = (char*) MK_FP( 0x7000, 0x87D6 );
  2. char  &maxTM  = *_maxTM;     // declaration d'une reference pour facilité d'usage


 
et maintenant son appel:

Code :
  1. char* m_pcNbMov[NB_MAX];
  2. ...
  3. m_pcNbMov[0] = &maxTM;
  4. ...
  5. DetachAll(tab,m_pcNbMov[0]);


 
alors qu'est-ce que j'ai pas compris dans la gestion reference, pointeur and co?


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 09-12-2004 à 10:31:14   

Reply

Marsh Posté le 09-12-2004 à 12:01:44    

alors plusieurs solutions à ce silence:
- c'est tellement simple que ça ne merite pas de reponse
- c'est tellement mal expliqué que personne y comprend rien
- c'est mon compilo qui date de mathusalem qui déraille
- ils sont tous en pause café...
 
(faites que ce soit le 3, faites que ce soit le 3 :ouimaitre: )


Message édité par yulara le 09-12-2004 à 12:08:24

---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 09-12-2004 à 12:17:08    

Que veux tu dire par "est traitée comme un short" ? Je comprend pas quel est ton problème...

Reply

Marsh Posté le 09-12-2004 à 12:20:23    

oki.
alors pour moi, avec ce code, je ne suis supposée gérer que des 'char'.
or il s'avere que dans DetachAll, le *tytab = 0 me gere tytab comme un short et non comme un char => ecriture de 2 octets au lieu d'1 => ecrasement de la variable suivante.
 
et j'aimerai comprendre pourquoi à cet endroit là, tytab est géré comme un short.
 
(je sais pas si c'est plus clair...)


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 09-12-2004 à 12:24:09    

Rassure moi, c'est pas sur le short 0x7000 que tu as remarqué ça ?

Reply

Marsh Posté le 09-12-2004 à 12:27:16    

ben il me met 0 en 7000:87D6 et 7000:87D7, alors que je voudrais qu'il ne le mette qu'en 87D6


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 09-12-2004 à 12:33:25    

Ca me parrait louche ton histoire. Tu es sûre que ce n'est pas un effet de bord ? Tu as essayé de simplifier ton code ?

Reply

Marsh Posté le 09-12-2004 à 12:58:43    

ben, j'ai fait du debug à la yulara (à savoir printf du tytab et de la variable suivante, vu que je suis sur un systeme embarqué sans debuggueur...), et c'est bien le *tytab=0 qui me pourrit ma variable suivante.
 
en passant tout en short au lieu de char, plus de soucis, sauf que je perds pas mal d'octets et que les octets sont precieux.  
ça m'enerve de pas comprendre pourquoi, parce que ça peut en cacher d'autres des trucs de ce genre :spamafote:


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 09-12-2004 à 13:04:20    

Tu as quoi comme environnement/compilo ?

Reply

Marsh Posté le 09-12-2004 à 13:08:14    

188em on va dire sans OS avec compilo borland 45 (on ne rigole pas :o )


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 09-12-2004 à 13:08:14   

Reply

Marsh Posté le 09-12-2004 à 13:35:21    

j'ai pas tout lu dans le détail mais... un sizeof(*tytab) ça te dit quoi?

Reply

Marsh Posté le 09-12-2004 à 13:41:36    

ça j'ai pas essayé, mais je suppose qu'à cet endroit là il doit me donner 2, vu qu'il m'ecrit 2 octets :spamafote:


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 09-12-2004 à 13:51:06    

sizeof(char) vaut toujours 1, même s'il y a 2 octets.  
 
Il serait plus intéressant que tu nous donne la valeur de sizeof(char*) (car visiblement, un pointeur vaut 4 octets).


Message édité par Lam's le 09-12-2004 à 13:58:02
Reply

Marsh Posté le 09-12-2004 à 14:26:30    

argh...heu... faudrait que je revienne au code d'origine pour ça... je vais essayer de le faire cet aprem pour voir ce que ça donne, j'aimerai bien comprendre ce qu'il se passe quand meme.
 
je vous mets un truc genre "%fp %d %ld %ld",tytab,*tytab,sizeof(tytab),sizeof(*tytab) ?


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 09-12-2004 à 14:33:06    

yulara a écrit :

je vous mets un truc genre "%fp %d %ld %ld",tytab,*tytab,sizeof(tytab),sizeof(*tytab) ?


Ouaip, et un café et l'addition.

Reply

Marsh Posté le 09-12-2004 à 15:34:43    

j'ajouterais: "oui s'il te plait :o"

Reply

Marsh Posté le 09-12-2004 à 15:54:17    

roh petard, en fait, c'est mon pointeur qui s'incremente avant l'appel de la fonction :pt1cable:
bon ben j'ai plus qu'à aller checher quel est le bout de code qui m'incremente ce truc sans qu'on lui demande :cry:
 
mais pourquoi je l'ai pas vu avant :pfff:
 
ah j'allais oublier:
http://www.delawareaudubon.org/images/coffee.jpg
 
et pour l'addition, c'est pour moi :jap:


Message édité par yulara le 09-12-2004 à 15:55:35

---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 09-12-2004 à 15:57:57    

yulara a écrit :


et pour l'addition, c'est pour moi :jap:


merci, tu es bien urbaine

Reply

Marsh Posté le 09-12-2004 à 16:08:04    

merci surtout à vous, maintenant je sais où il faut que je cherche :jap:


---------------
Quizz'n'Blind pour tester vos connaissances
Reply

Marsh Posté le 13-12-2004 à 11:06:58    

Citation :

voila la fonction où le schlimblick se passe:


 
il me semble que l'on dit schmilblick

Reply

Marsh Posté le 14-12-2004 à 21:45:58    

Il te semble bien :jap:.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed