IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

fuites de mémoire


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut fuites de mémoire
    Bonjour!

    Je suis occupé a un programme. Le code et le programme sont téléchargeable ici: http://rapidshare.de/files/41283488/roue.zip.html

    Le problème, c'est que le programme s'arrête après quelque temps a cause de quelques fuites de mémoires. J'ai beau chercher je ne trouve pas...

    J'espère que quelqu'un aura le courage de parcourir mon code pour trouver la cause de mes problèmes.

    Sinon j'ai une question.

    ex.: j'envoie une surface et 'ecran' a une fonction.
    Dans la fonction je crée une copie de cette surface et je transforme cette copie.
    Je blitte la copie sur l'ecran.

    Que dois-je alors libérer?
    La copie?
    La copie, la surface initiale?
    La copie, la surface initiale et l'ecran?


    Merci pour votre aide!

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Franklin92 Voir le message
    Bonjour!
    Bonjour,

    Citation Envoyé par Franklin92 Voir le message
    Je suis occupé a un programme. Le code et le programme sont téléchargeable ici: http://rapidshare.de/files/41283488/roue.zip.html

    Le problème, c'est que le programme s'arrête après quelque temps a cause de quelques fuites de mémoires. J'ai beau chercher je ne trouve pas...
    As-tu penser à instrumenter ton code (trace des allocations/libérations, trace des échecs d'allocation)? As-tu essayé d'utiliser un debugger?

    Citation Envoyé par Franklin92 Voir le message
    Sinon j'ai une question.

    ex.: j'envoie une surface et 'ecran' a une fonction.
    Dans la fonction je crée une copie de cette surface et je transforme cette copie.
    Je blitte la copie sur l'ecran.

    Que dois-je alors libérer?
    La copie?
    La copie, la surface initiale?
    La copie, la surface initiale et l'ecran?


    Merci pour votre aide!
    La responsabilité de la libération doit être au même niveau que celle de l'allocation. Pour savoir quand libérer, poses-toi la question: à partir de quel moment je n'ai plus besoin de la zone mémoire? Faire attention à qui maintient un pointeur sur la zone ?

  3. #3
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Pas franchement user friendly ton programme, je suis obligé de killer X pour sortir, comment fait on pour quitter proprement ton programme? pourquoi n'y a t'il pas d'aide?
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut debugger et allocation dynamique
    Re-bonjour,

    Tu parles d'un débugger et d'instrumenter mon code.
    Tu n'es pas la première personne, mais je ne comprend pas vraiment de quoi vous parler. Je travaille avec Code::Blocks et dans Code::Blocks il y a déjà un debugger a la base. (si je me souviens bien) Y aurait-il donc d'autres débuggers disponibles qui corrigent autrement que le débugger de base? Ou sont-ils disponibles? A quoi servent-ils?

    ex.: j'envoie une surface et 'ecran' a une fonction.
    Dans la fonction je crée une copie de cette surface et je transforme cette copie.
    Je blitte la copie sur l'ecran.

    Que dois-je alors libérer?
    La copie?
    La copie, la surface initiale?
    La copie, la surface initiale et l'ecran?
    Dans mon cas, je vais essayer:

    Dans la fonction je delete la copie. Ca c'est sur vu que je la recrée la prochaine fois que je fais appel a la fonction.

    Si j'ai bien compris c'est tout. La surface initiale et l'ecran, je les ai encore besoin.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    void fonction(SDL_Surface *carre, SDL_Surface *ecran)
    {
       SDL_Surface *copieCarre = NULL;
    copieCarre = SDL_RotoZoom(....carre...);//Je modifie la copie
    SDL_BlitSurface(copieCarre,NULL,ecran,&position);
     
    SDL_FreeSurface(copieCarre);
    }
     
    int main()
    {
    SDL_surface *carre = NULL;
    carre = SDL_CreateRGBSurface(SDL_HWSURFACE,100,80,32,0,0,0,0);
     
    while(continuer)
    {
       fonction(carre,ecran);
    }
     
    SDL_FreeSurface(ecran);
    SDL_FreeSurface(carre);
     
    }
    Je n'ai pas tout envoyer.

    Est-ce correct?

  5. #5
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Répond à mes questions s'il te plaît que je puisse t'aider.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  6. #6
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    /*OK*/void initPersonne(Pers *Personne[12])//On initialise toutes les variables de Personne
    {
        int i = 0;
        for(i = 0;i < 12; i++)
        {
            Personne[i]->base = NULL;
            Personne[i]->photo = NULL;
            Personne[i]->nom = "";
            Personne[i]->Snom = NULL;
            Personne[i]->argent = ARGENT_DEBUT;
            Personne[i]->Sargent = NULL;
            Personne[i]->posPhoto; /* <= c'est normal ça? */
            Personne[i]->posNom; /* <= c'est normal ça? */
            Personne[i]->posArgent; /* <= c'est normal ça? */
        }
    }
     
    /*OK*/void initCases(Case Cases)
    {
        Cases.Act = 0;
        Cases.longeur = 0;
        Cases.hauteur = 0;
        Cases.position; /* <= c'est normal ça? */
        Cases.surface = NULL;
        Cases.nbMax = 0;
        Cases.nbAct = 0;
        Cases.txt = NULL;
    }
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Réponse
    Salut

    Pour quitter proprement il suffit de faire 'escape'.

    Et pour les positions, c'est vrai que c'est pas obligé, non ce n'est pas normal en effet, mais ca ne cause aucun problème je crois.

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Franklin92 Voir le message
    Re-bonjour,

    Tu parles d'un débugger et d'instrumenter mon code.
    Tu n'es pas la première personne, mais je ne comprend pas vraiment de quoi vous parler. Je travaille avec Code::Blocks et dans Code::Blocks il y a déjà un debugger a la base. (si je me souviens bien) Y aurait-il donc d'autres débuggers disponibles qui corrigent autrement que le débugger de base? Ou sont-ils disponibles? A quoi servent-ils?
    Pour le debugger : tu peux utiliser celui de gcc (même si je ne le trouve pas très pratique). L'idée, est de mettre des points d'arrêts dans des sections que tu penses sensibles et regarder l'état de tes variables, comment se déroule ton code, etc... En comprendre la dynamique en fait.
    Pour instrumenter ton code, il s'agit souvent de rajouter des traces à différents endroits (traces vers un fichier de log ou vers une console ou vers ce que tu veux ...) : l'idée est la même qu'avec le debugger, il s'agit d'obtenir des informations sur les fonctions appelées, l'état des paramètres, des variables globales si t'en as, etc... pour comprendre la dynamique d'exécution de ton programme.

Discussions similaires

  1. fuite de mémoire ?
    Par salseropom dans le forum C
    Réponses: 2
    Dernier message: 12/01/2006, 16h19
  2. Réponses: 1
    Dernier message: 02/12/2005, 14h18
  3. fuite de mémoire
    Par mamag dans le forum MFC
    Réponses: 17
    Dernier message: 19/08/2005, 10h42
  4. Fuite de mémoire en utilisant le template list
    Par schtroumpf_farceur dans le forum Langage
    Réponses: 9
    Dernier message: 18/07/2005, 20h44
  5. Réponses: 8
    Dernier message: 17/10/2002, 12h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo