Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/04/2010, à 19:45

astroOo

[résolu]g++ et appel du destructeur

Bonjour

J'ai créé une classe avec son constructeur et son destructeur que j'ai compilé avec g++.

J'exécute ensuite un petit programme qui cré cette classe puis se termine.

Lorsque je test la présence de fuite mémoire avec valgrind, il m'indique qu'il y en a. Cependant lorsque je fais un appel explicite au destructeur dans mon petit programme, valgrind ne m'indique plus de fuite mémoire.

J'ai lu que c'était au compilateur de faire cet appel au destructeur, donc je ne comprends pas pourquoi je dois le faire.

Voici mon makefile, je m'y suis peut-être trompé

all: cavalier

cavalier: main.o enigmeCavalier.o
    g++ -o cavalier enigmeCavalier.o main.o

main.o: main.cpp enigmeCavalier.h
    g++ -c main.cpp

enigmeCavalier.o: enigmeCavalier.cpp enigmeCavalier.h
    g++ -c enigmeCavalier.cpp


Merci d'avance

Dernière modification par astroOo (Le 14/04/2010, à 23:03)

Hors ligne

#2 Le 14/04/2010, à 21:43

Le Farfadet Spatial

Re : [résolu]g++ et appel du destructeur

Salut à tous !

   Difficile de dire quoique ce soit sans le code. Donc : poste ton code, s'il-te-plaît.

   À bientôt.

   Le Farfadet Spatial

Hors ligne

#3 Le 14/04/2010, à 21:56

delphinus

Re : [résolu]g++ et appel du destructeur

Salut,

Pour répondre à ta question principale: ton makefile est correct.

Pour la suite, je dirai comme Le Farfadet Spatial: faut voir le code.

a+

Hors ligne

#4 Le 14/04/2010, à 22:23

astroOo

Re : [résolu]g++ et appel du destructeur

Le voilà

enigmeCavalier.h

#ifndef ENIGMECAVALIER_H_

#define ENIGMECAVALIER_H_

/**
 * @brief class enigme cavalier
 * cette classe permet de résoudre l'énigme du cavalier
 */
class EnigmeCavalier {

	public:
		/**
		 * constructeur
		 * param[in] x : l'abscisse du placement initial du cavalier
		 * param[in] y : l'ordonnée du placement initial du cavalier
		 * param[in] largeur : largeur du plateau de jeu
		 * param[in] hauteur : hauteur du plateau de jeu
		 */
		EnigmeCavalier(int x, int y, int largeur, int hauteur);

		/**
		 * Destructeur
		 */
		~EnigmeCavalier();

	private:
		/*contient le chemin parcouru*/

		int* chemin;
		bool** damier;
		/* hauteur du damier */
		int hauteur_;
		/* largeur du damier */
		int largeur_;
		/*abscisse courante*/
		int x_;
		/*ordonnée courante*/
		int y_;
};

#endif /*ENIGMECAVALIER_H_*/

enigmeCavalier.cpp

#include <iostream>
#include "enigmeCavalier.h"

EnigmeCavalier::EnigmeCavalier(int x, int y, int largeur, int hauteur){
	x_ -= x;
	y_ -= y;
	/*-2 car une position a déjà été occupée*/

	chemin = new int [largeur*hauteur*2+1-2];
	/*la premier champs contiendra le champs suivant la dernière position insérée*/

	chemin[0] = 1;

	damier = new bool* [largeur];

	for(unsigned int i = 0; i < largeur; ++i){

		damier[i] = new bool[hauteur];

	}

	

	/*initialisation du damier*/

	for(unsigned int i = 0; i < largeur; ++i){

		for(unsigned int j = 0; j < hauteur; ++j){

			/*la case n'a pas été jouée*/

			damier[i][j] = false;

		}

	}
	hauteur_ = hauteur;
	largeur_ = largeur;
}

EnigmeCavalier::~EnigmeCavalier(){
	/* désallocation du damier */
	for(unsigned int i = 0; i < largeur_; ++i){
		delete [] damier[i];
	}
	delete [] damier;

	/* désallocation du chemin */
	delete [] chemin;
}

main.cpp

#include "enigmeCavalier.h"

int main(int argc, char *argv[]){
	EnigmeCavalier enigme(1,1,2,3);
	//enigme.~EnigmeCavalier();
	return 0;
}

Merci de votre aide

Dernière modification par astroOo (Le 17/04/2010, à 19:04)

Hors ligne

#5 Le 14/04/2010, à 23:03

astroOo

Re : [résolu]g++ et appel du destructeur

J'ai désinstallé les paquets gpp et g++, puis j'ai réinstallé le paquet g++. Maintenant le compilateur fait bien appel au destructeur.
Désolé j'aurais dû essayer cette méthode plus tôt. Bonne soirée.

Hors ligne