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 :

CODE GUARD et gestion mémoire


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 136
    Par défaut CODE GUARD et gestion mémoire
    Bonjour,

    Je suis en train de passer mon appli (exe) en activex (objet COM/OLE je crois).
    En fait, en codant la chose, je me suis apercu que j'avais de jolie fuite mémoire...
    le code fait environ 50 000 lignes, j'ai pas tout ecrit, et il reste que moi pour maintenir et faire évoluer le soft.

    Pour l'instant, je rame avec des points d'arrets, et Process Explorer ( un ctrl_alt_supp amélioré) pour trouver les fuites mémoires.

    je voulais savoir si code guard pourrait m'aider dans cette recherche, ou si un petit analyser de code pouvait remplir mieux ce genre de fonction?

    Merci d'avance
    ps: je suis sous BCB6 et j'ai jamais reussi à utiliser code guard...

  2. #2
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    CodeGuard génére des fichiers de type cgl indiquant les routines d'allocations mémoires, le mombre de fois qu'elles ont été lancées ,ainsi que lors de la terminaison du programme les éventuels leaks
    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 136
    Par défaut
    Bonjour,

    en fait, j'ai reussi a configurer code guard, mais il fait planter mon prog!

    en fait, j'utilise une focntion trouvé sur les FAQ (http://c.developpez.com/faq/vc/?page...ns#ConvertBstr) et code guard me dit qu'il y a une fuite mémoire, et je la comprend pas!
    il est pas content quand on vas ecrire le '\0' a la fin.

    et plus tard, il me fait perdre un pointeur sur un objet, et mon projet plante. Sans codeguard, ca marche...

    il ajoute des balises dans la mémoire???? il fait quoi pour changer le comportement?

    ps:je suis en train de mettre a jours BCB6...

  4. #4
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonjour
    c'est parfaitement normal que Codeguard ne soit pas content
    en effet le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strRet[length] = '\0';
    écrit dans une zone non allouée de la mémoire (le fameux caractère de fin)
    code d'allocation du buffer de sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     strRet = new char[length];
    le code correct de cette fonction est donc le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void BSTRtoASC (BSTR str, char *&strRet)
    {
        if ( str != NULL )
       {
           unsigned long length = WideCharToMultiByte (CP_ACP, 0, str, SysStringLen(str),
                                                NULL, 0, NULL, NULL);
           strRet = new char[length+1];// on alloue un caractère de plus pour le '\0'
           WideCharToMultiByte (CP_ACP, 0, str, SysStringLen(str),
                               reinterpret_cast <char *>(strRet), length, NULL, NULL);
            strRet[length] = '\0';
        }
    }
    par ailleurs la fonction appelante doit s'assurer de libérer la mémoire pour le str(SysFreeString), ainsi que pour le pointeur passé en référence(delete []xxx)

    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  5. #5
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 136
    Par défaut
    J'ai honte...

    en fait, j'avais fait une modif et celle la... apres un dur plantage borland ben je l'avais paumé et j'avais pas vu...

    donc, je vais corriger tout ca...

    J'ai mis a jours bcb 6 et j'ai plus le bug de code guard.

    Merci pour l'aide.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 59
    Par défaut
    utilises memproof
    c'est beaucoup mieux que codeguard

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

Discussions similaires

  1. Réponses: 44
    Dernier message: 02/08/2006, 16h12
  2. TAO, Value types et gestion mémoire
    Par TiChabin972 dans le forum CORBA
    Réponses: 1
    Dernier message: 25/04/2006, 20h55
  3. [D7] Tableau dynamique et Gestion mémoire
    Par Cl@udius dans le forum Langage
    Réponses: 7
    Dernier message: 13/03/2006, 15h16
  4. [Gestion mémoire] SetLength sur TDoubleDynArray
    Par MD Software dans le forum Langage
    Réponses: 14
    Dernier message: 24/04/2005, 21h11
  5. Gestion mémoire des Meshes (LPD3DXMESH)
    Par [Hideki] dans le forum DirectX
    Réponses: 1
    Dernier message: 08/07/2003, 20h34

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