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

  FORUM HardWare.fr
  Programmation
  C++

  [C++] problème avec delete []

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] problème avec delete []

n°719530
Library
Posté le 08-05-2004 à 16:56:07  profilanswer
 

bonjour à tous
 
J'ai un petit problème, et je pense que c'est du à delete[]. Je n'ai ni erreur de compilation, ni erreur de segmentation, mais mon programme s'arrete (sans me redonner la main) au milieu d'une boucle. Voici la portion de code qui pose problème :
 

Code :
  1. double * Reseau::Rcalcule_sortie (double * exemples)
  2. {
  3. // cette fonction s'occupe de calculer la sortie du réseau  
  4. cout << " a "<< flush ;
  5. // initialisation de l'entrée  
  6. double * Rentree=new double[Rnb_entrees[0]];
  7. for (int i=0;i<Rnb_entrees[0];i++)
  8. {
  9. Rentree[i]=exemples[i+Rdecalage]; // on remplit l'entrée avec les valeurs du vecteur d'entrée  
  10. }
  11. double * entree=new double[Rnb_entrees[0]];
  12. entree=Rentree; // entree est le vecteur d'entrée de la couche de neurones en cours  
  13. double * sortie=new double[Rcouche[0]]; // sortie est le vecteur de sortie de la couche de neurones en cours  
  14. cout << " b " << flush;
  15. // calcul couche par couche de la sortie  
  16. int nprec=0;
  17. for (int i=0;i<Rnbcouches;i++) // de la premiere à la derniere couche de neurones  
  18. {
  19. cout << Rnbcouches << flush;
  20. for (int j=0;j<Rcouche[i];j++) // du premier neurone de la couche au dernier  
  21. {
  22. sortie[j]=neurone[nprec+j].Ncalcule_sortie(entree); // on calcule la sortie  
  23. // du neurone en cours et on la rentre dans le vecteur de sortie  
  24. }
  25. nprec+=Rcouche[i]; // fait car les neurones sont ne sont pas indexés par couche  
  26. if (i!=Rnbcouches-1) // si on n'est pas sur la dernière couche de neurones  
  27. {
  28. cout << "!" << flush;
  29. // on veut ici dire que le vecteur de sortie de la couche en cours est le vecteur  
  30. // d'entrée de la couche suivante.  
  31. delete [] entree; // on efface entree, qui n'a plus d'utilité  
  32. entree=new double [Rcouche[i]]; // entree va etre de la taille de sortie  
  33. entree=sortie; // on met la sortie dans l'entrée  
  34. delete [] sortie; // on efface sortie, qui va etre de la taille du nombre de neurones  
  35. sortie=new double [Rcouche[i+1]]; // dans la couche suivante  
  36. cout << ";" << flush;
  37. }
  38. else // si la couche en cours est la derniere  
  39. {
  40. Rsortie=sortie; // on sauvegarde la sortie dans la variable de la classe Reseau  
  41. cout << "-" << flush;
  42. }
  43. }
  44. cout << "z" << flush;
  45. return Rsortie; // et on renvoie la sortie  
  46. }


 
dans ce code, le probleme est entre le cout << "!" << flush;  et le cout << ";" << flush; . Cette portion est exécutée environ 500 fois avant de s'arreter.
Vous auriez une idée de comment corriger ca ?
 
merci d'avance :)

mood
Publicité
Posté le 08-05-2004 à 16:56:07  profilanswer
 

n°719542
Taz
bisounours-codeur
Posté le 08-05-2004 à 17:12:23  profilanswer
 

entree=sortie; // on met la sortie dans l'entrée  
        delete [] sortie;
 
 
tu crois faire quoi là ? entree est dans le décor

n°719569
Library
Posté le 08-05-2004 à 18:23:11  profilanswer
 

j'ai besoin de changer la taille de sortie, donc je pense qu'il faut le deleter avant non ?
ca marcherait si plutot que de faire entree=sortie, je copiais un à un les éléments de sortie dans entree ?

n°719581
Taz
bisounours-codeur
Posté le 08-05-2004 à 18:36:30  profilanswer
 

je sais pas ce que t'as besoin de faire, je vois juste
 
         entree=new double [Rcouche[i]]; // entree va etre de la taille de sortie  
        entree=sortie; // on met la sortie dans l'entrée  
 
 
ça fuit comme un seau percé
 
entree=sortie; // on met la sortie dans l'entrée  
        delete [] sortie; // on efface sortie, qui va etre de la taille du nombre
 
corruption mémoire ...

n°719602
Library
Posté le 08-05-2004 à 19:15:23  profilanswer
 

je vais prendre un exemple. On va dire qu'au début, entree est de dimension 5. Le programme va ensuite "transformer" ces entrées et va fournir, par exemple, 4 sorties (donc sortie est de dimension 4)
le truc, c'est que ces sorties vont être les futures entrées pour la couche d'après. Il faut donc que je sauvegarde sortie et que je le mette dans entree. C'est tout ce que je veux faire.
Mais pour ca, il faut bien que entree ait la meme taille que sortie non ? Et ensuite, sortie va devoir etre de dimension 3 (par exemple), donc je redimensionne sortie.
 
Et si je mettais entree et sortie de taille maximale (la taille maximum qu'ils peuvent prendre) et que je ne les delete pas, tu penses que ca marcherait ?

n°719603
Taz
bisounours-codeur
Posté le 08-05-2004 à 19:21:57  profilanswer
 

je te lis pas, je m'intéresse pas à ton algo.
 
t'as rien bité aux pointeurs
 
forme toi ou passe à std::vector

n°719605
Library
Posté le 08-05-2004 à 19:26:16  profilanswer
 

j'ai une connaissance assez limitée des pointeurs ;)
merci quand meme :)

n°719606
Taz
bisounours-codeur
Posté le 08-05-2004 à 19:30:19  profilanswer
 

ben alors les utilises pas :o
 
 
tu te rends compte de ce que tu fais quand tu écris  
 
entree=new double [Rcouche[i]];
entree=sortie;
delete [] sortie;  

n°719615
Library
Posté le 08-05-2004 à 19:46:01  profilanswer
 

y a pas trop le choix quand meme ;)
 
dans le code, là, d'abord je déclare que entree a une certaine taille, ensuite je dis que l'adresse mémoire d'entree vaut l'adresse mémoire de sortie, mais la troisieme ligne je sais pas trop comment elle est gérée. Soit ca supprime l'adresse mémoire de sortie, et donc celle d'entree, soit ca fait que supprimer la liaison entre sortie et son adresse mémoire, c'est ca que j'ignore.
Mais vu que ca seg fault pas, j'ai pensé que c'etait la deuxieme solution la bonne

n°719620
Taz
bisounours-codeur
Posté le 08-05-2004 à 19:58:26  profilanswer
 

mais tu me parles de quoi là ?
 
 
d'abord je déclare que entree a une certaine taille, ensuite je dis que l'adresse mémoire d'entree vaut l'adresse mémoire de sortie
 
 
t'es dans l'incompréhension totale, t'es pas cohérent du tout en plus ... pour toi l'affectation à deux sens différents ...
 
 
 
allez utilise std::vector

mood
Publicité
Posté le 08-05-2004 à 19:58:26  profilanswer
 

n°719625
Library
Posté le 08-05-2004 à 20:31:45  profilanswer
 

utiliser std vector sera pas plus simple pour moi ;)
je vais d'abord essayer ce que j'ai mis plus haut, en esperant que ca marche.

n°719627
Taz
bisounours-codeur
Posté le 08-05-2004 à 20:42:35  profilanswer
 

ça marchera pas, au mieux, ça fuira. t'es incapable de gérer la mémoire, c'est trop complexe pour toi. utilise std::vector et après, si tu y tiens vraiment, tu pourras retourner aux pointeurs :  comme ton algo fonctionne et ne s'occupe pas de la mémoire, ça sera plus facile. concentre toi sur ton algo, tu n'es pas capable de gérer la mémoire, et c'est de toute façon déconseillé de le faire de maniè-re brute

n°719643
cricri_
Posté le 08-05-2004 à 21:24:39  profilanswer
 

Là suis franchement d'accord avec Taz, j'espère que c'est pour un truc perso qui ne sera jamais divulgué ...

n°719652
belgique
Posté le 08-05-2004 à 21:48:27  profilanswer
 

Cricri_ a écrit :

Là suis franchement d'accord avec Taz, j'espère que c'est pour un truc perso qui ne sera jamais divulgué ...


C'est pour le code de PyGTK. Le code est disponible :)

n°719654
Taz
bisounours-codeur
Posté le 08-05-2004 à 21:51:42  profilanswer
 

belgique a écrit :

C'est pour le code de PyGTK. Le code est disponible :)

heink ?

n°719659
Library
Posté le 08-05-2004 à 22:00:21  profilanswer
 

Cricri_ a écrit :

Là suis franchement d'accord avec Taz, j'espère que c'est pour un truc perso qui ne sera jamais divulgué ...


 
bien sûr, c'est perso ;)
j'ai pas la prétention de vouloir faire quelque chose de professionnel, loin de là.

n°719660
belgique
Posté le 08-05-2004 à 22:01:02  profilanswer
 


Humour foireux  :whistle:


Message édité par belgique le 08-05-2004 à 22:01:09
n°719664
Taz
bisounours-codeur
Posté le 08-05-2004 à 22:25:28  profilanswer
 

Library a écrit :

bien sûr, c'est perso ;)
j'ai pas la prétention de vouloir faire quelque chose de professionnel, loin de là.

fais quelque chose qui marche

n°719671
Library
Posté le 08-05-2004 à 22:36:38  profilanswer
 

crois bien que c'est là mon seul but ;)
que ce soit optimisé et propre, je m'en fous completement :)

n°719673
Taz
bisounours-codeur
Posté le 08-05-2004 à 22:48:35  profilanswer
 

mais souvent optimisation et propreté sont voisines
et quelque chose qui marche vraiment doit être propre

n°719679
Library
Posté le 08-05-2004 à 23:07:51  profilanswer
 

je veux quelque chose qui marchotte, qui est plus lent que ce que ca devrait etre, moins fonctionnel aussi, mais qui fais ce que je veux.

n°719683
Taz
bisounours-codeur
Posté le 08-05-2004 à 23:43:58  profilanswer
 

:pfff:

n°719686
Library
Posté le 09-05-2004 à 00:07:12  profilanswer
 

on a pas la meme conception de la programmation, c'est tout ;)

n°719690
Taz
bisounours-codeur
Posté le 09-05-2004 à 00:13:13  profilanswer
 

ça c'est clair, tu bricoles

n°719697
gilou
Modérateur
Modosaurus Rex
Posté le 09-05-2004 à 01:12:05  profilanswer
 

Library a écrit :

on a pas la meme conception de la programmation, c'est tout ;)

Vaudrait peut etre pas employer ce terme, vu ta conception.
A+,

n°720489
blackgodde​ss
vive le troll !
Posté le 10-05-2004 à 12:50:44  profilanswer
 

entree=new double [Rcouche[i]];  
entree=sortie;  
delete [] sortie;
 
=> comment se tirer dans le pied en 3 lignes ^^


---------------
-( BlackGoddess )-
mood
Publicité
Posté le   profilanswer
 


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

  [C++] problème avec delete []

 

Sujets relatifs
Problème avec les indexMySQL: problème avec une requête multitable
probleme de creation d un compte sous sql serveru via phpprobleme pour creer des compte sql via php
Probléme mediaProblème d'utilisation de PEAR::DB
petit probleme de recursivitéprobleme de declaration de variable
Probleme d'utilisation des variables je crois (PHP + SVG)[C] problème de pointeur
Plus de sujets relatifs à : [C++] problème avec delete []


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)