[C++] J'y comprends plus rien !

J'y comprends plus rien ! [C++] - Programmation

Marsh Posté le 18-05-2001 à 19:57:06    

Voici un court extrait de mon programme :
 
ofstream & operator << (ofstream& out, const Fluid& f)
{
  out << f.variables << ...  
  out << f.matrices << ...
  out << flush;
  cout << "Well done\n";
  return out;
}
 
void Fluid::Save(const string filename)
{
  ofstream f(filename.c_str(), ios::binary);
  if (f==NULL)
    {
      cout << "Unable to create v3d file : " << filename << "\n";
      return;
    }
  cout << "Writing fluid file...\n";
  f << (Fluid) *this;
  cout << "This is done\n";
}
 
 
Quand je lance la fonction Fluid::Save(), voila ce que j'obtiens a l'ecran :
 
Writing fluid file...
Well done
Segmentation fault
 
Pourquoi diable est-ce que ca plante ? :crazy::crazy:
Quelqu'un a-t-il deja eu des pbs similaires, ou qq'un a t'il une idee ??

Reply

Marsh Posté le 18-05-2001 à 19:57:06   

Reply

Marsh Posté le 18-05-2001 à 23:54:33    

"Segmentation fault" c'est un pb d'allocation de mémoire je crois. Mais je comprends pas vraiment ton prog vu qu'il n'y a pas tout. Il fait quoi ton opérateur <<.
Moi j'essayerais de ne pas retouner une référence pour ton opérateur <<.


---------------
Découvrez la version 2005 du  Site des Mains!! C'est la même qu'en 2004!
Reply

Marsh Posté le 20-05-2001 à 04:37:11    

Je suis oblige de retourner une reference si je veux surcharger l'operateur << (qui consiste a ecrire des donnees dans un flux, fichier pour f, sortie ecran pour cout).
 
Ce que je ne comprends pas c'est qu'a priori le programme plante au moment du "return out", alors que quand je regarde le fichier ecrit, il est parfaitement correct, la structure s'est parfaitement bien sauvee sur le disque. Le probleme vient du fait qu'il n'arrive pas a effectuer le 'return out'.
C'est franchement  :ouch:  :(

Reply

Marsh Posté le 20-05-2001 à 11:26:02    

pour moi, c'est:
f << (Fluid) *this;
 
qui fait planter. Le passage par référence, c'est très vicieux comme truc. C'est un passage par adresse écrit et manipulé comme un passage par valeur.
Tu devrai essayer ça:
f << (Fluid) this;

Reply

Marsh Posté le 21-05-2001 à 09:02:54    

rufo> ok pour ton explication, mais pourquoi dans ce cas l'operateur << arrive a m'ecrire correctement le contenu de la classe Fluid dans le fichier, et plante uniquement au retour, au 'return out' ?
 
Si le passage par reference de *this merdait, ca le ferait des le debut non ?

Reply

Marsh Posté le 21-05-2001 à 09:41:25    

Je suis desolee de te repoondre par une question, mais pourquoi :
f<<(Fluid)*this;
et non pas f<<*this; ?
 
Qu'apporte le Cast Fluid ici ?
Il me semble plus dangereux qu'autre chose...
Est-il necessaire ?

 

[edit]--Message édité par BENB--[/edit]

Reply

Marsh Posté le 21-05-2001 à 09:48:26    

Il apporte pas grand chose c vrai.
C'est juste que j'ai ecrit l'operateur << pour un grand nombre de classes, qui derivent les unes des autres, et je veux etre sur que le compilateur ne fait pas n'importe quoi.
 
Mais tu as raison je vais essayer sans le cast. :hello:

Reply

Marsh Posté le 21-05-2001 à 10:01:33    

YES ! CA MARCHE ! :benetton: :hap:
 
Un probleme qui me tracassait depuis des lustres... BENB je t'adore :hello:

Reply

Sujets relatifs:

Leave a Replay

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