"out of memory" dans la liste d'initialisation

"out of memory" dans la liste d'initialisation - C++ - Programmation

Marsh Posté le 31-01-2003 à 08:52:50    

Bonjour !
Comme c'est mon premier message sur ce forum, j'en profite pour saluer tout le monde  :hello:
 
Lors de la réalisation d'un programme en c++, je me suis heurté au pb suivant : j'ai une classe relativement importante qui contient pas mal de petites classes. Ces classes, je les agrège en interne, par valeur, et par conséquent j'appelle leurs contructeurs dans la liste d'initialisation du constructeur de ma classe principale.
 
Truc::Truc(paramètres)
 :classe1(p1,...,pn),classe2(...),...classeZ(...)
{
// là, je fais des choses
}
 
Cela fonctionnait plutôt bien jusqu'à ce que je passe des paramètres un peu complexes à mes classes agrégées, typiquement
 
Truc::Truc(paramètres)
 :classe1(n, k/n),classe2(...),...classeZ(...)
{}
 
Bref, une ch'tite division par-ci, une multiplication par là...
A partir de ce moment, mon programme s'est mis à planter en m'envoyant un message "out of memory".
 
Pour sauver la face, j'ai ajouté des méthodes à mes classes et je passe leurs paramètres à l'intérieur du constructeur, mais j'aimerais quand même en savoir plus sur cette liste d'initialisation:
- Ai-je fait une erreur ?
- Y a t-il une limitation du nombre d'appels de méthodes (liée à la taille de la pile, par exemple) ?
- Est-ce un pb de compilo ?
- Est-ce déjà arrivé à qqn d'autre ?
 
J'utilise gcc-2.95.3 sous linux (SuSe), et ce "out of memory" ressemble beaucoup à une exception levée...
 
a+
Umag

Reply

Marsh Posté le 31-01-2003 à 08:52:50   

Reply

Marsh Posté le 31-01-2003 à 08:56:21    

umag a écrit :


Truc::Truc(paramètres)
 :classe1(p1,...,pn),classe2(...),...classeZ(...)
{
// là, je fais des choses
}


 
Tu peux mettre ça en plus précis. Notamment comment est écrit paramètre.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 31-01-2003 à 09:09:38    

Il n'y a pas grand chose :
 
Truc::Truc(int a, int b, float c, int d)
  :classe1(0, b/c, 0.3, 15),classe2(b/c, b),attr1(a),attr2(d)
{
// ...
}
 
que j'ai remplacé par
 
Truc::Truc(int a, int b, float c, int d)
  :classe1(0.3, 15),classe2(),attr1(a),attr2(d)
{
   float v = b/c;
   // ...
 
   classe1.setParam(0,v);
   classe2.setParam(v,b);
 
   // ...
}
 
et là ça marche !
 
Je devrais peut-être préciser que classe1 et classe2 contiennent des attributs de classe Matrice, dérivée de vector<double>.

Reply

Marsh Posté le 01-02-2003 à 05:51:17    

:hello:
Je ne vois pas d'erreur dans le code, et je ne connais pas ce problème.
Donc: http://forum.hardware.fr/icones/flag1.gif


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

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