Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1913 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  C++ : HELP ME - variable changeant toute seule

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C++ : HELP ME - variable changeant toute seule

n°952712
dark86
Posté le 13-01-2005 à 22:33:20  profilanswer
 

Bonjour,
j'ai essayé de faire un petit programme en C++ permettant de vérifier le parenthésage d'une chaîne de carractères en utilisant une pile (liste chainée) mais j'ai deux problemes  :( :
 - le dépilage ne marche pas :fou:  
 - j'ai une variable qui voit sa valeur changer lors de l'exécution d'une commande "printf" de celle-ci :ouch: , ce que je ne savais pas possible :ouch:  :ouch:  :ouch: ...
 
mon programme:
***effacé***
 
 
 
si qqun peut m'éclairer sur le changement de valeur de la variable, et ensuite sur une probable erreur dans le dépilage....:D
merchiii


Message édité par dark86 le 31-08-2005 à 14:36:26
mood
Publicité
Posté le 13-01-2005 à 22:33:20  profilanswer
 

n°952718
chrisbk
-
Posté le 13-01-2005 à 22:40:31  profilanswer
 

bon, on va dire que t'as dis C++ alors que tu voulais dire C
 

Code :
  1. struct brique {
  2. int c;
  3. struct brique* prec;
  4. };
  5. typedef struct brique brik;


 
=>  
 

Code :
  1. typedef struct brique {
  2. int c;
  3. struct brique* prec;
  4. }brik;


 
Cela dit je déconseille d'utiliser le langage SMS dans un langage de programmation, enfin c'est toi qui vois.
 
 
 
 

Code :
  1. void empile(brik** P, int n)
  2. {
  3. brik nouvo;
  4. nouvo.prec = *P;//se place en haut de chaine
  5. nouvo.c = n;
  6. *P = &nouvo;//s'impose comme tête de chaîne
  7. printf("\nempilage...." );
  8. }


 
A partir de la, c'est la cata complete.  Comme tu le sais, il y a des variables dites locales, et ces variables sont détruites lorsque l'on quitte la fonction les ayants crée. Hors, la que voyons nous ? Que tu conserve l'adresse d'une de ces variables locales (l'adresse de nouvo, pour etre plus précis). Ce qui n'est pas bon, du tout.
 
Bref, ce qu'il te faut faire, c'est allouer dynamiquement de la mémoire :
 
 

Code :
  1. void empile(brik** P, int n)
  2. {
  3. brik *nouvo = malloc(sizeof(brik));
  4. nouvo->prec = *P;//se place en haut de chaine
  5. nouvo->c = n;
  6. *P = nouvo;//s'impose comme tête de chaîne
  7. printf("\nempilage...." );
  8. }


 
La.
Par contre, si on malloc d'un coté, faudra penser a  libérer de l'autre coté. Je corrige pas la suite car tout ces pointeurs voltigeant dans tous les sens me cassent la tete, et que j'ai pas trop envie de jouer au mikado ce soir. Essaye de deblayer un peu tout ca, que diable.
 
 
 
 

n°952739
dark86
Posté le 13-01-2005 à 23:22:48  profilanswer
 

MERCHIIIIIIIII beaucoup
j'avais effectivement oublié l'alloc dynamique :blush:
j'ai juste eu à ajouter :
brik *nouvo = (brik*) malloc(sizeof(brik));
et le programme semble fonctionner correctement :D
 
pour l'histoire du C/C++, oui je fais du C mais j'écris tjrs en *.cpp donc c un peu du mélange^^
 
voila qui resout le pblem principal, mais je ne comprends toujours pas comment les "printf" de mon ancien programme (certes tout buggé ms le pblem n'est plus là^^) faisaient pour changer la valeur de "pile->c"...
je laisse le prog erronné à la meme adresse si qqun peut mexpliker le dernier ptit probleme :D
 
prog corrigé :  
***effacé***


Message édité par dark86 le 31-08-2005 à 14:36:52
n°952748
chrisbk
-
Posté le 13-01-2005 à 23:38:43  profilanswer
 

dark86 a écrit :

MERCHIIIIIIIII beaucoup
j'avais effectivement oublié l'alloc dynamique :blush:
j'ai juste eu à ajouter :
brik *nouvo = (brik*) malloc(sizeof(brik));
et le programme semble fonctionner correctement :D
 
pour l'histoire du C/C++, oui je fais du C mais j'écris tjrs en *.cpp donc c un peu du mélange^^
 
voila qui resout le pblem principal, mais je ne comprends toujours pas comment les "printf" de mon ancien programme (certes tout buggé ms le pblem n'est plus là^^) faisaient pour changer la valeur de "pile->c"...
je laisse le prog erronné à la meme adresse si qqun peut mexpliker le dernier ptit probleme :D
 
prog corrigé :  
http://awoiselle.perso.egim-mrs.fr [...] /main2.cpp


 
 
bin faut savoir que les variables locale sont stockée sur ce que l'on appelle 'la pile'. Quand tu appeles une fonction, tu copie les parametres sur la pile (+d'ot trucs que je developpe pas). Bref, la ou avant il y avait ta variable locale, il y a peut etre apres d'autre var locale que se sont foutus dessus, ou des parametres, ou n'importe quoi....


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  C++ : HELP ME - variable changeant toute seule

 

Sujets relatifs
Perte initialisation variableUne variable de session qui change toute seule ! Je m'arrache les chvx
comment stocker les résultat dans une variable[VAB - XL] - Nom de Userform Variable
probleme de valeur de variablePassage de variable depuis une boucle ???
variable qui bugHelp tritement d'image et programmation c++
Graphique couplé avec variable $_POST 
Plus de sujets relatifs à : C++ : HELP ME - variable changeant toute seule


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR