[Labo C++ 2R] projet Bloxorz

Voir le sujet précédent Voir le sujet suivant Aller en bas

[Labo C++ 2R] projet Bloxorz

Message  Froggy le Ven 12 Déc 2008, 14:56

Bonjour à tous !

Voilà j'ai un petit soucis avec mon code donc je voulais savoir si quelqu'un pouvait m'aider Smile

Lors de la construction via un fichier j'ai une segmentation fault lors qu'on execute la ligne du try.
La chaine d'argument est bien récupérée à partir du fichier (affichage à l'écran de la chaine en question dans le constructeur de Plateau à l'appui).

Code:

try{this->plateau = new Plateau(&argsPlateau);}
catch (MyException e){throw;}

J'ai donc d'abord vérifier si je n'avais aucun soucis lors du constructeur de Plateau mais là encore, rien. Il se passe tout à fait correctement. L'erreur se produisant bien lors du retour dans le try après l'appel du constructeur de Plateau. J'ai l'impression que c'est à l'affectation du plateau mais je ne vois pas ce qui cloche sachant que le membre privé plateau est déclaré comme suit :

Code:

private :
   
Plateau *plateau;

Le plus troublant étant que le problème n'apparait pas avec le fichier config0 (le jeu tourne parfaitement avec ce fichier là...) mais bien avec tout les autres...

Merci d'avance à ceux qui essayeront de m'aider Wink

Froggy

Nombre de messages : 49
Age : 30
Prénom : Matthieu
Statut : étudiant
Localisation : Ixelles
Date d'inscription : 05/05/2007

Revenir en haut Aller en bas

Re: [Labo C++ 2R] projet Bloxorz

Message  Wark le Ven 12 Déc 2008, 17:21

Je sais que tous les fichiers de jeu ne sont pas corrects (Renvoi d'un string exception : "Impossible d'ouvrir le fichier xxx" de la part de la méthode statique fournie dans la librairie SMBOutils). Ceci dit, je ne les ai pas tous testés. Wink

D'autres zone mémoire fournissent des indications qui se trouvent hors du plateau (ce qui, pour moi, peut conduire à une segmentation fault).

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [Labo C++ 2R] projet Bloxorz

Message  smb le Ven 12 Déc 2008, 21:51

Je veux bien chercher l'erreur, mais dans un code complet !
N'hésite pas à m'envoyer le répertoire complet de ton projet (pour windows), je verrai ce que je peux faire.
smonbaliu@heb.be

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [Labo C++ 2R] projet Bloxorz

Message  Froggy le Ven 19 Déc 2008, 14:46

Me revoilà avec une deuxième petite question Smile

Dans la surcharge d'opérateur = de ma PartieBloxorz, il faut que je construise un nouveau Plateau (voir code correspondant plus bas). Cependant, je n'ai aucun moyen de le faire puisque n'ayant pas de constructeur de Plateau qui ne reçoit aucun argument et qui ne fait rien.

En fait je peux effectivement faire
Code:
this->plateau=new Plateau();
mais il appelle le constructeur Plateau(int,int,bool) mais avec les valeurs par défaut. Ce qui ne m'interresse évidement pas puisque j'effectue alors un paquet d'instructions inutiles.

Une solution serait de créer un constructeur vide et qui ne fait rien mais alors j'ai le problème inverse. Je ne peux plus appeller le contructeur (int,int,bool) avec les 3 arguments par défaut.

Donc je voulais savoir s'il n'y avait pas une autre solution Smile

Code:
PartieBloxorz & PartieBloxorz::operator =(const PartieBloxorz &p){
       
        .
        .
        .
        delete plateau;
        this->plateau=new Plateau();
        this->plateau=p.plateau;
        /*
        mon problème ce situe ici puisque je vais appeler
        le constructeur de Plateau(int,int,bool) avec les
        arguments par defaut qui en fait ne m'interresse pas du tout.
        */
    }

Code:
class PartieBloxorz{

    private :

    Plateau *plateau;
    .
    .
    .
}

Code:
class Plateau {
   
    public :

    Plateau (int=4, int=4, bool=true);
    Plateau (unsigned char *);
    Plateau (const Plateau&);
    Plateau & operator = (const Plateau &);
    ~Plateau();
};

merci d'avance à ceux qui prendront le temps de me lire et éventuellement de m'aider ! Wink

PS : j'ai déjà demandé au labo et le prof n'a pas pu m'orienter vers une autre solution que la mienne.

Froggy

Nombre de messages : 49
Age : 30
Prénom : Matthieu
Statut : étudiant
Localisation : Ixelles
Date d'inscription : 05/05/2007

Revenir en haut Aller en bas

Re: [Labo C++ 2R] projet Bloxorz

Message  gquentin le Ven 19 Déc 2008, 16:29

Salut,

si je comprends bien ton problème, tu veux copier ton plateau et ce qui t'embête est que tu dois d'abord créer un nouveau plateau. Pour éviter cela, tu dois utiliser le constructeur par recopie (j'ai vu que tu l'as mis) :
Code:

this->plateau = new Plateau(p.plateau);

si tu as bien écrit ton constructeur par recopie, il fera une copie de ton plateau et le new retournera son adresse => this->plateau pointera bien vers une copie de ton plateau


J'espère que cela t'as aidé

gquentin

Nombre de messages : 24
Age : 31
Prénom : Quentin
Statut : Ancien Industriel - Cuvée 2009
Localisation : Overijse
Date d'inscription : 14/10/2008

Revenir en haut Aller en bas

Re: [Labo C++ 2R] projet Bloxorz

Message  smb le Ven 19 Déc 2008, 17:13

gquentin a écrit:Salut,

si je comprends bien ton problème, tu veux copier ton plateau et ce qui t'embête est que tu dois d'abord créer un nouveau plateau. Pour éviter cela, tu dois utiliser le constructeur par recopie (j'ai vu que tu l'as mis) :
Code:

this->plateau = new Plateau(p.plateau);

si tu as bien écrit ton constructeur par recopie, il fera une copie de ton plateau et le new retournera son adresse => this->plateau pointera bien vers une copie de ton plateau


J'espère que cela t'as aidé

Hum ! Je dirais plutôt
Code:

this->plateau = new Plateau ( *(p.plateau) ) ;

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [Labo C++ 2R] projet Bloxorz

Message  gquentin le Ven 19 Déc 2008, 17:14

juste, j'avais pas fait attention... Embarassed

gquentin

Nombre de messages : 24
Age : 31
Prénom : Quentin
Statut : Ancien Industriel - Cuvée 2009
Localisation : Overijse
Date d'inscription : 14/10/2008

Revenir en haut Aller en bas

Re: [Labo C++ 2R] projet Bloxorz

Message  Froggy le Sam 20 Déc 2008, 17:20

j'avais en effet penser au constructuer par recopie mais j'ai mal écris ma ligne de code pour l'appeller ... Razz

Sans m'attarder dessus, j'en avais déduit que je pouvais pas le faire (ce qui est stupide en y repensant puisqu'il est fait pour ... Rolling Eyes )

bref ... merci pour vos réponses ! Wink

Froggy

Nombre de messages : 49
Age : 30
Prénom : Matthieu
Statut : étudiant
Localisation : Ixelles
Date d'inscription : 05/05/2007

Revenir en haut Aller en bas

Re: [Labo C++ 2R] projet Bloxorz

Message  Contenu sponsorisé Aujourd'hui à 18:56


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum