Erreur sur pointeur sur int

Erreur sur pointeur sur int - C - Programmation

Marsh Posté le 22-08-2011 à 13:11:53    

Bonjour à tous
 
Alors voilà mon problème : j'ai un programme qui fait appel à une fonction A qui elle même fait appel à une fonction B.
La fonction B prend en paramètre un pointeur de int (int *a) et un pointeur sur char (char *c).
Dans ma fonction B je déclare un int en local (int a_loc) (qui fait sa vie dans la fonction) et à la fin de la fonction B je fais donc :  
*a=a_loc afin de récupérer la valeur de a_loc dans ma fonction appelante (A)
 
Le problème est que je n'arrive pas à récupérer la valeur justement, ci-dessous le code avec qui je pense mon problème sera plus clair
 
Code :  
 
Dans la fonction A :  
 
int my_int = 0;
char *my_char;
int retour = 0;
..........
..........
.........
retour  = fonctionB(&my_int, &my_char);
printf ("Affichage 1 : <%d>", my_int);

 
Dans la fonction B :  
 
int fonction (int *a, char *b) {
 
int a_loc = 0;
.........
..........
.........
 
*a=a_loc;
printf ("Affichage 2 : <%d>", *a);
return 0;
 
}

 
Au final mes 2 affichages sont différents (le deuxième est bon mais le premier est toujours à 0)
 
PS : je suis sous Linux Red Hat5
 
Merci d'avance pour votre aide
 

Reply

Marsh Posté le 22-08-2011 à 13:11:53   

Reply

Marsh Posté le 22-08-2011 à 13:54:45    

Je ne trouve pas de raison valable au non-fonctionnement de ton code. L'erreur doit se trouver dans la partie non recopiée ici.

 

Voici un code minimaliste qui reprend ton post :

Code :
  1. #include <stdio.h>
  2.  
  3. void bar(int *farfarawayinadistantgalaxy) {
  4.   int foobar = 123;
  5.   *farfarawayinadistantgalaxy = foobar;
  6.   printf("farfarawayinadistantgalaxy = %d\n", *farfarawayinadistantgalaxy);
  7. }
  8.  
  9. void foo() {
  10.   int i = 0;
  11.   bar(&i);
  12.   printf("i = %d\n", i);
  13. }
  14.  
  15. int main(void) {
  16.   foo();
  17.   return 0;
  18. }
 

Résultat :

farfarawayinadistantgalaxy = 123
i = 123

 

edit : par contre, tu passes &my_char, qui est de type char**, à ta fonction B qui n'accepte qu'un char* en argument

Message cité 1 fois
Message édité par Elmoricq le 22-08-2011 à 13:58:45
Reply

Marsh Posté le 22-08-2011 à 14:10:05    

Effectivement il s'agit bien d'un char ** b.
 
J'ai trouvé l'erreur, on faisait un malloc *a dans la fonction B.
Je l'ai supprimé et tout marche nickel.
Merci quand même
 

Elmoricq a écrit :

Je ne trouve pas de raison valable au non-fonctionnement de ton code. L'erreur doit se trouver dans la partie non recopiée ici.
 
Voici un code minimaliste qui reprend ton post :

Code :
  1. #include <stdio.h>
  2.  
  3. void bar(int *farfarawayinadistantgalaxy) {
  4.   int foobar = 123;
  5.   *farfarawayinadistantgalaxy = foobar;
  6.   printf("farfarawayinadistantgalaxy = %d\n", *farfarawayinadistantgalaxy);
  7. }
  8.  
  9. void foo() {
  10.   int i = 0;
  11.   bar(&i);
  12.   printf("i = %d\n", i);
  13. }
  14.  
  15. int main(void) {
  16.   foo();
  17.   return 0;
  18. }


 
Résultat :

farfarawayinadistantgalaxy = 123
i = 123


 
edit : par contre, tu passes &my_char, qui est de type char**, à ta fonction B qui n'accepte qu'un char* en argument


Reply

Sujets relatifs:

Leave a Replay

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