Gros soucis ! element modifié tout seul alors que je ne veux pas!

Gros soucis ! element modifié tout seul alors que je ne veux pas! - C - Programmation

Marsh Posté le 22-05-2010 à 16:41:56    

Bonjour !  
 
Alors j'ai un gros problème qui m'énerve sérieusement depuis plus d'une semaine!
Je ne sais vraiment pas comment l'expliquer... mais les jours passent et je dois bientôt rendre mon projet donc j'en ai marre de tourner en rond et de rester impuissante sans avancer.
Je vais essayer d'expliquer du mieux que je peux...(en évitant de donner du code entier car je suis en école et je ne suis pas seule a travailler sur ce projet)
 
J'ai créé des structures Polynome comme suit :
 

Code :
  1. typedef struct{
  2. int deg;
  3. double *coefficients;
  4. }polynome;


 
par exemple pour le polynome 5X^3 + 2X^2 + 4X +1 on a  

Code :
  1. int deg=3;
  2. double coefficients [4] = {1,4,2,5}


 
A un moment donné, dans une méthode je crée un pointeur sur polynome :  

Code :
  1. polynome *somme = new_polynome(3,coefficients);

 
J'affiche le polynome (avec la methode affiche_polynome(polynome *p)) j'obtiens:

Code :
  1. [5X^3 + 2X^2 + 4X +1]


Tout va bien.
Ensuite j'appelle une methode A qui n'utilise SURTOUT PAS le polynome somme que je viens de créer au dessus.
Je reaffiche somme et j'obtiens :

Code :
  1. [0X^3 + 2X^2 + 4X +1]


 
!!!!! je ne comprend rien !!!! dans la methode A je ne touche pas a somme, alors pourquoi le 5 a disparu?
 
Avez vous une idée de quoi ca peut être dû? comme je manipule pas mal de pointeurs est ce qu'à un moment donné j'accède à l'adresse où été stocké le 5 même si en aucune façon j'ai modifié les éléments de somme?
Est ce que je n'ai pas libéré de mémoire comme il fallait?
 
Je suis complétement perdue surtout que je ne maitrise pas vraiment bien ce qu'il se passe dans la mémoire...
Je vous remercie d'avance pour votre aide ...
 
 

Reply

Marsh Posté le 22-05-2010 à 16:41:56   

Reply

Marsh Posté le 22-05-2010 à 16:46:35    

:hello: Faut montrer le code, car il n'est pas possible d'en dire plus.
Comment tu alloues la mémoire pour coefficients?
A+,


Message édité par gilou le 22-05-2010 à 16:46:54

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-05-2010 à 16:50:15    

ok je vais le faire


Message édité par rahela le 22-05-2010 à 16:51:16
Reply

Marsh Posté le 22-05-2010 à 16:51:21    

T'aurais pas confondu degré (n) et nombre de coefficients (n+1) quelque part comme laisse supposer gilou?

Reply

Marsh Posté le 22-05-2010 à 17:08:51    

Code :
  1. void methode(double *donnees, int size){
  2. //creation d'un polynome
  3. double coef [1] = {0};
  4. polynome *p = new_polynome(0,coef);
  5. polynome *tmp;
  6. int i;
  7. for(i=0; i<size; i+=2){
  8.  affiche_polynome(p);
  9.  tmp = autre_methode(donnees[i]); // autre_methode renvoie un pointeur sur polynome, elle fonctionne bien
  10.  affiche_polynome(p);
  11. }
  12. return 1;
  13. }


 
quand on arrive a la seconde boucle, le second affichage est différent du premier, alors que vous voyez bien que je n'y touche pas

Reply

Marsh Posté le 22-05-2010 à 17:09:59    

Et non je ne pense pas avoir confondu, j'ai toujours fait gaffe que le nombre de coefficients est deg+1

Reply

Marsh Posté le 22-05-2010 à 17:25:18    

et si tu commentes tmp = autre... ?


---------------
"I can cry like Roger. It's just a shame I can't play like him" - Andy Murray, 2010
Reply

Marsh Posté le 22-05-2010 à 17:35:21    

si je commente evidemment il n'y a plus l'erreur....

Reply

Marsh Posté le 22-05-2010 à 17:42:32    

jai modifié autre_methode en lui faisant prendre le polynome p en argument.
J'ai pu donc afficher p jusqu'à l'erreur, et c'est lorsque je déclare un polynome temporaire (pour diverses opérations) que le 5 a disparu...
 

Code :
  1. //affichage ok
  2. double coef [2]={1,0};
  3. polynome *tmp = new_polynome(0,coef);
  4. //affichage pas ok du tout


 
voila, cet vraiment juste quand je crée un polynome temporaire qui ne me sert juste pour des opérations internes (comme la successions de produits de polynomes)

Reply

Marsh Posté le 22-05-2010 à 18:06:15    

Ton new_polynome(...) est écrit comment?

Reply

Marsh Posté le 22-05-2010 à 18:06:15   

Reply

Marsh Posté le 22-05-2010 à 18:31:57    

Ben oui, c'est ca qu'on veut savoir: comment tu alloues la mémoire.
Bref, c'est ou que tu fais le malloc? qu'on voie la taille allouée par rapport au degré du polynôme.
(Pas pu répondre plus tôt, mon frère a débarqué avec mes 3 nièces)
A+,


Message édité par gilou le 22-05-2010 à 18:32:28

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-05-2010 à 18:51:14    

Je suis désolée c'est vraiment compliqué d'expliquer ce que je suis en train de faire déjà que j'arrive même pas à me l'expliquer... si je vous envoie le code entier ca va être dur de me comprendre...
 
J'ai trouvé un algo PLUS SIMPLE qui m'évite de manipuler tous ces polynômes merdiques...(2semaines quand meme) n'empêche que je ne vois toujours pas pourquoi j'ai eu cette erreur mais avec le peu de temps qu'il me reste il vaut mieux que je passe à la suite...
 
Désolée d'avoir pris de votre temps !  
Je vous remercie beaucoup, c'est cool d'avoir un forum aussi actif comme celui ci, j'ai bien peur d'y revenir souvent les prochains jours :)
 
Bonne soirée à vous et merci!  

Reply

Sujets relatifs:

Leave a Replay

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