[C/C++] probleme de pointeur

probleme de pointeur [C/C++] - C++ - Programmation

Marsh Posté le 13-08-2002 à 14:26:00    

bonjour  
j'ai un pointeur dans le main:
unsigned char * Dest;
je fait un printf("%d",&dest);
ca me donne 655060  
ensuite j'envoie ce pointeur a une fonction
LoadBMP(Dest,"test.bmp" );
et dans la fonction je fait
Dest = new unsigned char[(Width*Height*3)];
et un printf("%d",&Dest);
et la ca me donne 655072
et dans le main, je refait le printf et j'ai encore un valeur differente.
Est-ce normal?
 
ca fait un moment que j'ai pas programmer donc il est possible que j'ai fait de grosse gaffe mais bon!

Reply

Marsh Posté le 13-08-2002 à 14:26:00   

Reply

Marsh Posté le 13-08-2002 à 14:30:38    

kick a écrit a écrit :

bonjour  
j'ai un pointeur dans le main:
unsigned char * Dest;
je fait un printf("%d",&dest);
ca me donne 655060  
ensuite j'envoie ce pointeur a une fonction
LoadBMP(Dest,"test.bmp" );
et dans la fonction je fait
Dest = new unsigned char[(Width*Height*3)];
et un printf("%d",&Dest);
et la ca me donne 655072
et dans le main, je refait le printf et j'ai encore un valeur differente.
Est-ce normal?
 
ca fait un moment que j'ai pas programmer donc il est possible que j'ai fait de grosse gaffe mais bon!




 
si tu veux pouvoir modifier la varible pointée par Dest dans le main il faut que tu passe l'adresse de Dest à ta fonctino (&Dest) De plus si tu veux afficher l'adresse contenue dans Desct c :

Code :
  1. printf("%u",Dest);


---------------
Le Tyran
Reply

Marsh Posté le 13-08-2002 à 14:35:40    

euh letoii
j'ai pas precisé que les parametre d'entrees de LoadBMP
 
int LoadBMP(unsigned char *, char *);
 
donc quand je passe Dest, ca passe l'adresse du pointeur non?
si je passe &Dest, ca me dit que je veux passer le pointeur du pointeur

Reply

Marsh Posté le 13-08-2002 à 15:00:38    

Si j'ai bien compris, dans ta fonction tu veux faire pointer Dest sur un nouvel espace mémoir. Et tu te demande pkoi ça ne pointe pas dessus quand tu resort de ta fonction, non?


Message édité par LetoII le 13-08-2002 à 15:00:50

---------------
Le Tyran
Reply

Marsh Posté le 13-08-2002 à 15:04:37    

ouais c ca, en fait dans loadbmp je charge l contenu d'une image dans une surface unsigned char.
Ensuite je la reecrit dans un writebmp mais la pouf pouf la surface n'est plus la meme

Reply

Marsh Posté le 13-08-2002 à 15:13:19    

kick a écrit a écrit :

ouais c ca, en fait dans loadbmp je charge l contenu d'une image dans une surface unsigned char.
Ensuite je la reecrit dans un writebmp mais la pouf pouf la surface n'est plus la meme




 
D'ou la subtile différence entre:
 

Code :
  1. void maFonction1(unsigned char *a);
  2. void maFonction2(unsigned char **a);
  3. unsigned char *dest;
  4. void maFonction1(dest);
  5. void maFonction2(&dest);


 
 
 
Dans le premier cas on passe l'adresse contenue dans dest à la fonction (donc la modification de a ne se répercute pas dans le contexte appelant).
Dans le 2eme cas a contien l'adresse de la variable dest, donc quand *a est modifié la valeur dans dest est modifiée.


---------------
Le Tyran
Reply

Marsh Posté le 14-08-2002 à 15:59:20    

unsigned char * Dest;  
 
Dest est donc le pointeur.
C'est une erreur d'utiliser &Dest !
Il faut écrire : printf("%d",Dest);  
 
Voila...

Reply

Marsh Posté le 14-08-2002 à 16:12:18    

fouge a écrit a écrit :

unsigned char * Dest;  
 
Dest est donc le pointeur.
C'est une erreur d'utiliser &Dest !
Il faut écrire : printf("%d",Dest);  
 
Voila...




 
T'arrive après la bataille toi, je l'ai déjà signalé ;)


---------------
Le Tyran
Reply

Marsh Posté le 15-08-2002 à 04:16:42    

pour afficher un pointeur:

Code :
  1. printf("%p",ptr) ;


 
Si tu es en C++:

Code :
  1. unsigned char uc= 'A';
  2. unsigned char *dest= 0;
  3. void maFonction3(unsigned char*& puc){
  4. puc= &uc ;
  5. }
  6. void f(){
  7. maFonction3(dest) ;//modifies dest global
  8. }


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

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