Bug en C
nicolay1
Messages postés
176
Statut
Membre
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai un petit probléme, je commence les pointeur en C et j'ai un petit bug dans mon programme :
aucun bug n'est détécté par l'IDE ( qui est code::block ) mais quand je le laisse le programme arre^te de fonctionner quand il arrive à la ligne *g=*++ c'est ce bout là qui bug...
int multi(int a,int b,int *g);
multi(int a,int b,int *g){
int f;
for (f=1;f<5;f++){
*g=*g++;
}
return a*b;
}
int main()
{
int a,c,b;
int *g;
printf("entrez le premier nombre : ");
scanf("%d",&a);
printf("entrez le second nombre : ");
scanf("%d",&b);
c=multi(a,b,*g);
printf("adreese : %d , nombre : %d \n",&c,c);
printf("boucle for : %d",*g);
}
j'ai un petit probléme, je commence les pointeur en C et j'ai un petit bug dans mon programme :
aucun bug n'est détécté par l'IDE ( qui est code::block ) mais quand je le laisse le programme arre^te de fonctionner quand il arrive à la ligne *g=*++ c'est ce bout là qui bug...
int multi(int a,int b,int *g);
multi(int a,int b,int *g){
int f;
for (f=1;f<5;f++){
*g=*g++;
}
return a*b;
}
int main()
{
int a,c,b;
int *g;
printf("entrez le premier nombre : ");
scanf("%d",&a);
printf("entrez le second nombre : ");
scanf("%d",&b);
c=multi(a,b,*g);
printf("adreese : %d , nombre : %d \n",&c,c);
printf("boucle for : %d",*g);
}
7 réponses
-
-
Je ne suis pas certain de la réponse, mais comme ça donne une erreur de segmentation, je pense voir où il est.
"*g++"
renseigne toi sur la précédente des opérateur.
Si tu ne vois toujours pas, je t'aiderai plus ;-) -
Je pense que ce que tu as écrit n'est pas ce que tu veux faire.
*g = *(g+=1); /*Attention : différent de *g = *(g++) */
ou bien :
*g = *(g += sizeof(int)); /* si tu veux décaler ton tableau */
Pour écrire ça tu doit être sur que g est un poitneur sur une zone mémoire assez grande.
++ est prioritaire devant * donc en théorie, même si ce n'est pas ce que tu veux faire, ça devrait fonctionner.
Par contre, comme le suggère Char Sniper, je pense que tu voulais dire
*g = (*g)++;
Je n'ai pas pas très bien compris l'intéret de la boucle mais bon. -
Attention à ce que tu souhaites faire : *(g++) ou (*g)++ ?
g pointe sur rien... Faut le faire pointer sur une zone allouée.
c=multi(a,b,*g);
C'est plutôt multi(a,b,g); puisque tu dois envoyer l'adresse vu le prototype de la fonction.
printf("adreese : %d , nombre : %d \n",&c,c);
Pour afficher l'adresse, il vaut mieux mettre : %p plutôt que %d.
Tu as oublié également le : return 0; à la fin
Cdlt,
Google is your friend -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Bonjour,
Vous vouliez incrémenter la valeur pointée par g à ce que j'ai pu comprendre. Un petit exemple si ça peut vous aider :#include <stdio.h> void boucle1(int *b) { int i; for(i=0;i<4;i++) b[0]++;/* incremente la valeur pointée par b en utilisant les crochets*/ } void boucle2(int *b)/* fait la même chose que boucle1 */ { int i; for(i=0;i<4;i++) (*b)++;/* incremente la valeur pointée par b sans les crochets */ } int main(void) { int z=0,*x; boucle1(&z);/* envoie l'adresse de z */ printf("boucle 1 : %d\n",z); z=0; boucle2(&z); printf("boucle 2 : %d\n",z); x=&z;/* x pointe vers z */ *x=0;/* modif la valeur de z */ printf("z : %d\n",z); boucle1(x);/* envoie l'adresse de z contenue dans x */ printf(" x : %p z : %p\n",x,&z); printf("boucle 1 : %d\n",*x); *x=0; boucle2(x); printf("boucle 2 : %d\n",*x); return 0; } -
Merci beaucoup
excusez moi... mais en faite la seul connerie que j'avais faite c'est de ne pas avoir attribué au pointeur g une adresse, je suis désolé de vous avoir fait perdre votre temps. -
Bonjour ,
Il est mieux d'ecrire un Void au debut de la procedure, et aussi je pense que *g=*g++; n'est pas correct car *g++ est equivalant à *g = *g + 1
dans une boucle j'utilise *g++ ou g* = g* + 1-
l est mieux d'ecrire un Void au debut de la procedure
Non, il est mieux d'écrire un int puisque ça fonction renvoie un int...
et aussi je pense que *g=*g++; n'est pas correct car *g++ est equivalant à *g = *g + 1
dans une boucle j'utilise *g++ ou g* = g* + 1
Non plus. L'opérateur ++ est prioritaire par rapport à *. Dis autrement *g++ est équivalent à *(g++); soit *g; g++; Donc *g++ est tout à fait correct.
-