RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Serv: irc.irc-land.org
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 classe et "fuite de mémoire" !?

Forum : C++ - CONSOLE
Sous Catégorie : Console
Type du sujet : Sujet Normale
FAQ : FAQ C++ - CONSOLE

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET NON RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGE : [1]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM C++ - CONSOLE

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
juismoi
Nouveau membre
Inscrit : 27/04/2008
Messages : 8
Message
#152498
Posté le 27/04/08 à 12:06
Bonjour

Je suis débutant en c++.
Pour la première fois j'utilise des classes. Le programme fonctionne mais quand je regarde l'occupation mémoire, plus je crée d'objet, plus la mémoire est utilisée alors que les objets sont détruits (du moins je crois).
J'ai pas du tout comprendre !
Il ya deux classes;

Code de la première


c_affiche::c_affiche (SDL_Surface *p_ecran, const char *texte, int abscise, int ordonnee, int taille, int a, int b, int c) { p_police = TTF_OpenFont ("arial.ttf", taille); SDL_Color couleur = {a,b,c}; position.x = abscise; position.y = ordonnee; p_texte = TTF_RenderText_Blended (p_police, texte, couleur); SDL_BlitSurface (p_texte, NULL, p_ecran, &position); SDL_Flip (p_ecran); SDL_FreeSurface (p_texte); } c_affiche::~c_affiche () { }


Code de la deuxième


// La classe clavier permet de sélectionner que les touches alphabétiques du clavier. // La touche frappée est affichée à l'écran par l'intermédiaire d'un objet de la classe affiche c_clavier::c_clavier (SDL_Surface *p_ecran, char tc_du_nom [], int qs) // qs ne sert à rien pour l'instant... { a = 'A'; // Variables qui servent de limite, seules les touches du clavier compris entre a et z fonctionneront z = 'B'; enboucle = 1; // Variable pour la boucle while i = 0; // Sert comme indice pour le tableau de caractères tc_du_nom while (enboucle) { SDL_WaitEvent (&event); SDL_EnableUNICODE(1); switch(event.type) { case SDL_QUIT: exit(0); break; case SDL_KEYDOWN: if (event.key.keysym.unicode == SDLK_RETURN) // Accolade du if EVENEMENT, j'donne des p'tit nom pour m'aider { enboucle = 0; break; } else { if ( event.key.keysym.unicode > a && z < event.key.keysym.unicode) // si la touche est entre a et z { tc_du_nom [i] = event.key.keysym.unicode ; // Création d'un objet qui affichera les touches frappées c_affiche o_ecrit (p_ecran, tc_du_nom,224,224,20); i++; if (i==10) // Limitation du mot à 10 lettres { enboucle = 0; break; } } break; } // Accolade du if EVENEMENT } // Accolade du Switch } // Accolade du while } c_clavier::~c_clavier () { }


Si vous voulez le code complet à télécharger



Question:

Ais-je bien construit la chose ? ou j'ai rien compris au classe.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

juismoi
Nouveau membre
Inscrit : 27/04/2008
Messages : 8
Message
#152500
Posté le 27/04/08 à 12:51
Comme je ne sais pas comment on modifie sa question, je mets l'adresse pour télécharger le p'tit programme qui me pose problème





http://corbeaudeplume.canalblog.com/archives/c__/index.html

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

rainbow
Membre du club
Chef de projet(s) :
- IA savane
- Team MoteurProg

Avatar de rainbow
Inscrit : 26/05/2006
Messages : 926
Message
#152503
Posté le 27/04/08 à 13:27
théoriquement ton constructeur est correct mais on ne sait pas ce qu'il est censé faire... donc on peut pas te dire plus en détail ce que tu devrais faire. Par contre tes destructeurs sont... vides Smiley si tu as des allocation dynamiques ou pointeurs qui sont utilisé(e)s durant l'exécution de ta class n'oublie pas les delete...

Cependant il est normal que ta consommation de mémoire augmente je pense... même si les objets sont détruits il me semble qu'il reste quand même de la mémoire utilisée...
__________________________
............ Curtis: RTS 3D ..............
......Image
........... TeamMoteurProg...........

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

juismoi
Nouveau membre
Inscrit : 27/04/2008
Messages : 8
Message
#152504
Posté le 27/04/08 à 15:00
Oye

Au départ pour m'entrainer et comprendre le c++, j'ai fait un petit programme qui n'utilisait que des fonctions. La consommation mémoire était stable. Maintenant je veux refaire le même programme en utilisant les classes dont on vante tant les mérites. (J'en suis même pas à faire des patrons de classes). Sauf que dans mes essais (2 jours que je suis dessus) j'ai remarqué que la consommation augmentait et cela me contrarie (faut dire que je suis susceptible comme garçon) et maintenant si j'en venais au fond du problème (j'ai aussi un côté vieille pie)

Pour répondre à rainbow

Je veux que mon constructeur affiche le texte passé en argument (comme le faisait mes fonctions)
genre: c_affiche o_ecrit (p_fenetre, "lolo",124,124,20);
Et au joie je vois apparaître lolo sur mon écran. Et de la mémoire utilisé (snif)

Le destructeur est vide pour l'instant parceque je voulais qu'en détruisant l'objet ce qui était affiché disparaisse mais rien qu'en mettant SDL_FreeSurface ...Le programme bugge (orthographe !?).

Je mets le main au cas ou...


int main(int argc, char *argv[]) { // Initialisation de la sdl SDL_Init (SDL_INIT_VIDEO); SDL_Event event; TTF_Init (); // Création de la fenêtre principale SDL_Surface *p_fenetre; p_fenetre = SDL_SetVideoMode (800,600,32, SDL_HWSURFACE); SDL_WM_SetCaption ("Le jeu", NULL); SDL_FillRect (p_fenetre, NULL, SDL_MapRGB (p_fenetre ->format,50,60,68)); SDL_Flip (p_fenetre); char t[10]= {0}; for (int i = 0; i<1;i++) // Boucle d'aucune utlité en soi sauf qu'un objet y est créé puis normalment détruit à la fin de la boucle { c_affiche o_verd (p_fenetre, "lolo",124,124,20); // Création de l'objet qui affiche lolo SDL_Delay (4000); } // C'est à ce moment là que j'espère la libéralisation de la mémoire occupée par l'objet ! SDL_FillRect (p_fenetre, NULL, SDL_MapRGB (p_fenetre ->format,50,60,68)); // On efface l'écran SDL_Flip (p_fenetre); c_clavier o_mimi (p_fenetre, t ,300); // Création de l'objet . L'utilisteur entre un texte (10 mots max), le texte est affiché SDL_Delay (4000); // Pour avoir le temps d'admirer mon oeuvre TTF_Quit (); SDL_Quit (); return EXIT_SUCCESS; // Un programme fort intéressant, n'est-il pas ? }


J'vais regarder un peu les delete (c'est un passage du livre que j'ai pas trop vu encore)

merci bien

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

rainbow
Membre du club
Chef de projet(s) :
- IA savane
- Team MoteurProg

Avatar de rainbow
Inscrit : 26/05/2006
Messages : 926
Message
#152508
Posté le 27/04/08 à 15:58
tu peux toujours appeler ton destructeur après ta pause si tu veux...

for (int i = 0; i<1;i++) // Boucle d'aucune utilité en soi sauf qu'un objet y est créé puis normalement détruit à la fin de la boucle { c_affiche o_verd (p_fenetre, "lolo",124,124,20); // Création de l'objet qui affiche lolo SDL_Delay (4000); o_verd.~c_affiche(); }

et dans ton destructeur rajoute un delete pour chaque pointeur ;)
__________________________
............ Curtis: RTS 3D ..............
......Image
........... TeamMoteurProg...........

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

juismoi
Nouveau membre
Inscrit : 27/04/2008
Messages : 8
Message
#152544
Posté le 28/04/08 à 20:12
Oye

Pas trop marché avec les delete. Mais c'est pas grave. Pour l'instant la classe marche. Quand je m'y connaitrait un peu mieux, je reviendrais sur ce problème.
Merci pour ton aide

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM C++ - CONSOLE



    PAGE : [1]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.