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

  FORUM HardWare.fr
  Programmation
  C++

  débordement de la mémoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

débordement de la mémoire

n°1152505
d_imane
Posté le 18-07-2005 à 14:24:28  profilanswer
 

:jap: Hi,
je ne sais plus pourquoi le programme ci contre ne marche plus pour dim trés grande 60 par exemple

Code :
  1. #include<iostream>
  2. using namespace std;
  3. void main(int argc, char* argv[])
  4. { int dim=60;
  5.    float xmi=3.4,xma=115.6,ymi=3.4,yma=115.6;
  6.    srand( (unsigned)time( NULL ) );
  7.    base bas(dim,xmi,xma,ymi,yma);
  8. }
  9. vecteur::vecteur(){}
  10. vecteur::vecteur(vecteur &p){x=p.x;y=p.y;id=p.id;}
  11. void vecteur::afficher()
  12. {   //cout<<endl;  
  13. cout<<"id= "<<id<<endl;
  14. cout<<"xy: "<<x<<" "<<y<<endl;
  15. }
  16. vecteur::~vecteur(){}
  17. //==============la base===============
  18. base::base(int dim,float a,float b,float c,float d)
  19. {
  20. xmin=a;
  21. xmax=b;
  22. ymin=c;   //construire dim vecteur dans la base
  23. ymax=d;
  24. Dimbase=dim;
  25. for (int l=0;l<Dimbase;l++) vect=new vecteur();
  26. int i=0,p=0;
  27.     float value,val1,val2;
  28. ifstream Al;
  29. Al.open("fich.txt" );
  30. while (i <(Dimbase*2) )  // *2 ici car on va lire x et y  
  31. {
  32.   Al >> value;
  33.   val1=value;
  34.   Al >> value;
  35.   val2=value;
  36.  
  37.   if( (i%2)==0)
  38.   {
  39.      vect[p].x=val1;
  40.      vect[p].y=val2;
  41.      vect[p].id=compt++;
  42.      p++;
  43.    
  44.   }
  45. i=i+2;
  46. }
  47.  
  48. Al.close();
  49. }


Please help

mood
Publicité
Posté le 18-07-2005 à 14:24:28  profilanswer
 

n°1152529
theshockwa​ve
I work at a firm named Koslow
Posté le 18-07-2005 à 14:41:14  profilanswer
 

Code :
  1. int i=0;
  2. // ...
  3. while (i <(Dimbase*2) )  // *2 ici car on va lire x et y   
  4. {
  5.   //...
  6.   if( (i%2)==0) 
  7.   { 
  8.     // ...
  9.   }
  10.   i=i+2;
  11. }


 
[:petrus75] explique moi comment tu comptes passer dans le if ... explique-moi plutôt à quoi sert le if, en fait :o


Message édité par theshockwave le 18-07-2005 à 14:43:32
n°1152533
d_imane
Posté le 18-07-2005 à 14:43:58  profilanswer
 

j'ai déjà allouer la mémoire dans la boucle  

Code :
  1. for (int l=0;l<Dimbase;l++) vect=new vecteur();


n°1152537
theshockwa​ve
I work at a firm named Koslow
Posté le 18-07-2005 à 14:47:10  profilanswer
 

:heink:
 
C'est pour rire, ca, non ? ... Parce que là, c'est pas une fuite, que tu fais, c'est pire que tout ...
 
 
Edit : vect, c'est quoi, comme type ? vect *, j'imagine ... pourquoi tu ne te sers pas de la STL, pour gérer ca ?


Message édité par theshockwave le 18-07-2005 à 14:48:21
n°1152544
d_imane
Posté le 18-07-2005 à 14:49:17  profilanswer
 

oui oui ca n'as pas de sens, merci pour la remarque, mais ce n'est pas ca le probléme..

n°1152547
theshockwa​ve
I work at a firm named Koslow
Posté le 18-07-2005 à 14:50:26  profilanswer
 

si, le problème est là ... vect[p], ca va partir où, pour toi ?

n°1152551
d_imane
Posté le 18-07-2005 à 14:52:20  profilanswer
 

ok, vect est une class de type

Code :
  1. class vecteur 
  2. {
  3.   public :
  4.  float x,y;
  5.  int id;
  6.  float reald;
  7.  vecteur();
  8.  vecteur(vecteur &p);
  9.      vecteur(float a,float b,float c, float d);
  10. void afficher();
  11. virtual ~vecteur();
  12. };


c'est quoi le STL?

n°1152557
d_imane
Posté le 18-07-2005 à 14:55:00  profilanswer
 

et bas est de type

Code :
  1. #include"vecteur.h"
  2. class base
  3. {
  4. public:
  5. float xmin,xmax,ymin,ymax;
  6. int Dimbase;
  7. vecteur *vect;
  8. base(int dim,float a,float b,float c,float d);
  9. void WriteRealDataFile();
  10. void ReaDataFile();
  11. void afficher();
  12. virtual ~base();
  13. };

n°1152562
theshockwa​ve
I work at a firm named Koslow
Posté le 18-07-2005 à 14:58:07  profilanswer
 

STL = Standard Template Library :o
 
il va falloir que tu apprennes à t'en servir si tu veux faire du C++
 
On se fiche de ta classe vecteur, là, en l'occurrence ... Ce que tu fais, au final, c'est ca :
 

Code :
  1. vecteur * vect = new vecteur;
  2. vect[p].x; // accès aléatoire dans la mémoire


vect[p] te fait pointer sur une zone mémoire dont tu ne connais rien, si p est différent de 0 ...
 
D'où le renvoi à la STL, tu pourras y trouver de quoi gérer des listes, avec, par exemple : std::vector<vecteur>, qui t'évitera ce genre de problèmes :
 

Code :
  1. std::vector<vecteur> vect(dim);
  2. for(size_t i = 0; i<vect.size(); ++i)
  3.     vect[p].x; // accès tout à fait légal


n°1152639
d_imane
Posté le 18-07-2005 à 15:45:55  profilanswer
 

l'utilisation de

Code :
  1. std::vector<vecteur> vect(dim);


 me sort le message error C2039: 'vector' : is not a member of 'std'

mood
Publicité
Posté le 18-07-2005 à 15:45:55  profilanswer
 

n°1152646
theshockwa​ve
I work at a firm named Koslow
Posté le 18-07-2005 à 15:49:55  profilanswer
 

Code :
  1. #include <vector>


 
...
jette un oeil aux divers sites / livres proposés ici même parce qu'on ne répondra pas toujours à ce genre de questions triviales :/

n°1152699
d_imane
Posté le 18-07-2005 à 16:20:08  profilanswer
 

je suis débutante en c++, je vias prendre en compte ta remarque.
si j'ai bien compris  

Code :
  1. std::vector<vecteur> vect(dim);


defini un tableau de vect de type vecteur de dimension dim, si c'est bien ca je dois définir le constructeur par recopie, si je me trompe corrige moi stp.
j'ai le message d'erreur:class 'vecteur' : no copy constructor available

n°1152713
theshockwa​ve
I work at a firm named Koslow
Posté le 18-07-2005 à 16:34:03  profilanswer
 

si tu fais ca :

Code :
  1. std::vector<vecteur> vect(dim);


 
alors vect est un "tableau" de dim "vecteur"s, pour que ca fonctionne, il te faut un constructeur par défaut (sans paramètre, quoi) ou alors tu peux donner un vecteur qui représentera la valeur par défaut, auquel cas, oui, il te faut un constructeur par recopie.
 
par exemple :

Code :
  1. class vecteur 
  2. {
  3. public :
  4.   float x,y;
  5.   vecteur() : x(.0f), y(.0f) {};
  6.   vecteur(const vecteur &p) : x(p.x), y(p.y) {};
  7.   vecteur(float _x,float _y) : x(_x), y(_y) {};
  8.   virtual ~vecteur() {};
  9. };


 
te permettra de faire :

Code :
  1. std::vector<vecteur> vect(dim);


 
qui va te créer "dim" "vecteur"s par défaut (donc initialisés à (0.0f, 0.0f) ) ou encore
 

Code :
  1. std::vector<vecteur> vect(dim, vecteur(1.0f, -1.0f));


 
qui crée donc un tableau de "dim" "vecteur"s initialisés avec leur x à 1.0 et leur y à -1.0
 
Edit : j'imagine que le problème que tu as vient du manque de "const" dans ta version


Message édité par theshockwave le 18-07-2005 à 16:35:07
n°1152736
d_imane
Posté le 18-07-2005 à 16:51:29  profilanswer
 

Youuuuuupi, ca maaaaaaaaaarche!!
je te remercie infiniment.


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

  débordement de la mémoire

 

Sujets relatifs
FreeImage liberation memoireProblème de mémoire...
Probleme de mapping memoire[résolu]débordement mémoire!
blanc de mémoireORACLE : occupation mémoire du varchar2
[SGBD]Consommation memoire SQL SERVER 2000Modifier document.cookie en memoire vive
définir mémoire[C 16bits] débordement mémoire !?
Plus de sujets relatifs à : débordement de la mémoire


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