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++Builder Discussion :

Resource leak avec CodeGuard


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    23
    D�tails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 23
    Par d�faut Resource leak avec CodeGuard
    Bonjour,

    je vous explique mon probl�me, je dois reprendre un logiciel et y ajouter des fonctionnalit�s. J'ai voulu v�rifier avec codeguard si le programme �tait safe au niveau des fuites m�moires et j'ai trouv� un probl�me dans la fonction suivante :

    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
    29
    30
    31
     
    AnsiString * Hdw_CBaseFile::split(AnsiString chaine,unsigned char separateur, unsigned int * taille)
    {
            /*  On compte les séparateurs */
            int nbSep = 0;
            for(int i=1;i<=chaine.Length();i++)
                    if(chaine[i]==separateur)
                            nbSep++;
     
            /** On créé le tableau de la taille appropriée */
            (*taille) = nbSep+1;
            AnsiString * result = new AnsiString[(*taille)];
     
     
            /** On récupère les différentes sous-chaines */
            int index = 0;
            AnsiString temp = "";
            for(int i=1;i<=chaine.Length();i++)
                    if(chaine[i]==separateur)
                    {
                            result[index] = temp;
                            temp = "";
                            index++;
                    }
                    else
                            temp += chaine.SubString(i,1);
     
            result[index] = temp;
            return result;
     
    }
    C'est ce
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     new AnsiString[(*taille)];
    qui pose probl�me mais je ne vois pas comment supprimer ce tableau car la zone m�moire est utilis�e par une autre fonction avec
    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
    short int Hdw_CCsvDBFile::readData( Hdw_SCsvDBData * data, unsigned int index )
    {
            AnsiString temp;
            if( (temp=pFile->ReadString("Files",(AnsiString)index,"x"))=="x") return ERROR_READ_CSVDB_DATA;
     
            unsigned int nbDonnees;
            AnsiString * donnees = split(temp,';',&nbDonnees);
     
            if( nbDonnees<6 )
                    return ERROR_READ_CSVDB_DATA;
     
            try
            {
                    data->Fichier = donnees[1];
                    data->Description = donnees[2];
                    data->Type = donnees[3].ToInt();
                    data->Firmware = donnees[4].ToInt();
                    data->Categorie = donnees[5].ToInt();
            }
            catch(Exception & ex)
            {
                    return ERROR_READ_CSVDB_DATA;
            }
            return RESULT_OK;
    }
    j'ai essay� pas mal de choses et je ne vois pas comment �viter cette fuite...

    Je suis ouvert � toutes vos remarques !!

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    On peut remplacer un tableau d'AnsiString par un TStringList d�clar� en global dans l'unit� principale et qu'il suffit de d�truire � la fermeture du programme.

    Dans le constructeur de la fiche principale :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Chaines = new TStringList;
    Dans la OnClose de la fiche principale :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    Chaines->Clear();
    delete Chaines;
    Si ce TStringList est utilis� dans une unit� diff�rente, il suffira d'y d�clarer :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    extern TStringList *Chaines;
    Il ne restera plus qu'� rajouter les sous cha�nes � la liste, b�tement, sans doute avec une boucle while...

    Si l'algo doit construire plusieurs tableaux d'AnsiString (ici je ne sais pas), dans ce cas on peut utiliser un TList pour monter une liste de TStringList...

    Voir l'aide pour TStringList.

    A plus !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [PHP 5.4] Memory Leak avec la fonction exec()
    Par eaglesnipe dans le forum Langage
    R�ponses: 9
    Dernier message: 22/05/2014, 12h44
  2. Warning 'Resource leak'
    Par Christophe Genolini dans le forum D�buter avec Java
    R�ponses: 14
    Dernier message: 03/07/2013, 21h48
  3. [C#] Static Resource introuvable avec un chargement dynamique de XAML
    Par harrylahache dans le forum Windows Presentation Foundation
    R�ponses: 7
    Dernier message: 16/09/2011, 14h46
  4. [TOMCAT] Resource global avec url sp�cifique par application
    Par eXiaNazaire dans le forum Tomcat et TomEE
    R�ponses: 1
    Dernier message: 23/07/2009, 10h09
  5. Memory leak avec OleDB
    Par fantomchris dans le forum MFC
    R�ponses: 1
    Dernier message: 15/10/2008, 16h10

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