Bug en C
Fermé
nicolay1
Messages postés
145
Date d'inscription
mardi 22 février 2011
Statut
Membre
Dernière intervention
21 juin 2012
-
30 avril 2011 à 18:36
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 mai 2011 à 14:54
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 mai 2011 à 14:54
A voir également:
- Bug en C
- Bug yahoo mail - Accueil - Mail
- Bug chatgpt - Accueil - Intelligence artificielle
- Iptv bug - Forum Box et Streaming vidéo
- Iptv bug forum ✓ - Forum Box et Streaming vidéo
- Bug snap message invisible - Forum Snapchat
7 réponses
nicolay1
Messages postés
145
Date d'inscription
mardi 22 février 2011
Statut
Membre
Dernière intervention
21 juin 2012
8
30 avril 2011 à 18:49
30 avril 2011 à 18:49
up :D
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
30 avril 2011 à 21:46
30 avril 2011 à 21:46
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 ;-)
"*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.
*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.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
1 mai 2011 à 01:23
1 mai 2011 à 01:23
*g = *(g += sizeof(int));
Ca ne décale pas le tableau de 1 indice, mais de x indices (dépend de la machine, disons 4).
Par contre, comme le suggère Char Sniper, je pense que tu voulais dire
*g = (*g)++;
Ce n'est pas correcte cette écriture, cela provoque un comportement non défini...
Ca ne décale pas le tableau de 1 indice, mais de x indices (dépend de la machine, disons 4).
Par contre, comme le suggère Char Sniper, je pense que tu voulais dire
*g = (*g)++;
Ce n'est pas correcte cette écriture, cela provoque un comportement non défini...
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
Modifié par fiddy le 1/05/2011 à 01:20
Modifié par fiddy le 1/05/2011 à 01:20
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
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
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
Modifié par Hxyp le 1/05/2011 à 08:56
Modifié par Hxyp le 1/05/2011 à 08:56
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 :
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; }
nicolay1
Messages postés
145
Date d'inscription
mardi 22 février 2011
Statut
Membre
Dernière intervention
21 juin 2012
8
1 mai 2011 à 14:46
1 mai 2011 à 14:46
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.
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.
redaTDI
Messages postés
30
Date d'inscription
samedi 2 octobre 2010
Statut
Membre
Dernière intervention
9 novembre 2012
3
1 mai 2011 à 14:20
1 mai 2011 à 14:20
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
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
1 mai 2011 à 14:54
1 mai 2011 à 14:54
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.
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.