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 :

Problème fuite mémoire, allocation de tableau multidimensionnels


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Problème fuite mémoire, allocation de tableau multidimensionnels
    Bonjour,

    Je rencontre actuellement un problème de fuite de mémoire qui semblerait dû à une fonction de création de tableaux multidimensionnels.
    Voici ma fonction de création :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    double ** matrix(int nline, int nrow)
    {
        double **result;
        result = new double* [nline];
        for ( int i=0 ; i < nline ; i++)
        {
                result[i] = new double [nrow];
        }
        return result;
    }
    Je crée donc une matrice de la manière suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double ** m = matrix(n,p)
    et je désalloue la mémoire de la manière suivante


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for ( int i=0 ; i < n ; i++)
        {
                delete[] m[i];
        }
    delete[] m;
    Mon application consomme de la mémoire mais ne semble pas en libérer, un outil de recherche des fuites m'a guidé vers cette fonction mais je ne vois pas quoi modifier pour éviter les fuites.
    Je sollicite donc votre aide et remercie par avance toutes les personnes qui pourront m'aider.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour corky813

    Ton code, c'est du C, pas du C++. Il faudrait soit déplacer ton message sur le forum C, soit réécrire ton code en C++ (classe, std::vector). Il faut pas s'étonner d'avoir des fuites mémoire si on n'utilises pas les outils du C++ destinés... à éviter les fuites mémoires.
    Sinon, je vois rien dans ton code qui explique tes fuites mémoire (mais j'utilise pas ce type de tableau dynamique habituellement, il y a peut être quelque chose qui m'échappe)

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Ton code, c'est du C, pas du C++.
    Ha bon, des new et des delete en C, et depuis quand ? gbdivers a néanmoins raison sur un point : manipuler des tableaux C++ est en général une mauvaise idée.

    Voir ceci :

    Citation Envoyé par poukill Voir le message
    Find me on github

  4. #4
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    C’est à priori correct ce que tu fais (c’est à dire, c’est correct si je suis assez réveillé ce matin ).

    Je pense donc que :
    - soit tu ne passes pas dans le code qui libère la mémoire
    - soit tu alloues plusieurs fois ta matrice, mais ne la libère pas à chaque fois.
    - soit tu mets tes pointeurs à null avant de les libérer, du coup ils ne sont pas libérés

    Accessoirement, ce que tu fais n’est pas un moyen efficace de gérer une matrice*: si tu as besoin de contiguïté en mémoire, on préfère généralement allouer directement un tableau de n*m, et encapsuler le tout dans un objet pour pouvoir continuer à travailler dessus avec des indices comme tu le fais.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Il s'agissait en fait d'oublis bien cachés, j'ai réussi à limiter grandement la perte, il en reste un peu mais c'est beaucoup moins problématique qu'avant.

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    Ha bon, des new et des delete en C, et depuis quand ? gbdivers a néanmoins raison sur un point : manipuler des tableaux C++ est en général une mauvaise idée.
    Bien vu J'avais pas percuté que ce n'était pas des malloc/free, j'ai vu tableau style C et j'ai pensé directement au C.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probléme de Mémoire dans un tableau
    Par ryodo dans le forum Langage
    Réponses: 10
    Dernier message: 04/03/2012, 15h49
  2. Problème fuite mémoire
    Par scary dans le forum Débuter
    Réponses: 1
    Dernier message: 03/08/2010, 11h33
  3. problème fuite mémoire
    Par didoboy dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 29/07/2009, 11h46
  4. Problème fuite mémoire
    Par devconf77 dans le forum Windows
    Réponses: 12
    Dernier message: 04/10/2007, 20h45
  5. Problème fuite mémoire
    Par devconf77 dans le forum Windows
    Réponses: 3
    Dernier message: 30/08/2007, 18h33

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