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 :

J'ai tjrs le problème de Out of Memory


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut J'ai tjrs le problème de Out of Memory
    Salut,

    Dans un DBGrid, à la saisie d'un bon de livraison, lorsque le nombre de ligne est assez grand (plus de 20), le programme est interrompu et affiche le message : Out Of Memory
    La pièce est perdu

    Pourtant j'utiliser la commande delete pour libérer la mémoire.

    Je sait pas comment faire

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,

    Hé bé, sans vouloir jouer le relou avec une vieille rengaine, je dirais qu'il serait peut être intéressant pour tout le monde d'en savoir un peu plus sur le code utilisé autour de ce DBGrid, les obejcts pour la connection a la BDD, le type de tables, etc ...

    @ +

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut
    Pour être plus claire :
    J'utilise Firebird 2.0. (le même problème se pose avec Interbase).

    A l'appelation de saisie par menu, le prgme affiche une fenêtre ListePiecesFrm qui contient la liste des pièces déjà saisies. Je clique le Boutton Nouveou pour ajouter une pièce, la fenêtre de saisie des pièces PieceFrm s'affiche, puis aprés la saisie du numéro de pièce, la date, je fais appel pour chaque ligne à une autre fenêtre ArticlesFrm qui affiche les articles, après que je choisi l'article par recherche avec des requette SQL, je ferme la fenêtre ArticlesFrm et je place mon article dans la DBGrid de la fenêtre PieceFrm.

    NB. Ou moment de la saisie : j'ai les fenêtre suivant :
    - La fenetre principale
    - la fenêtre ListePiecesFrm
    - la fenêtre PieceFrm de saisie
    - la fenêtre ArticlesFrm pour le choix de l'article


    Si j'ai moins de 20 articles il n'a pas de problème. Mais dès que je dépasse 24 ou 28 çà dépend des cas, j'obtient le message Out Of Memory qui me dérange bcp et surtout mes clients.

    J'espère que j'ai bien posé le problème.

  4. #4
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Par défaut
    Salut !

    C'est bien de donner le diagramme d'apparition des fenêtres, mais je crois qu'il est...plus précis de donner des parties de ton code sources qui sont susceptibles de provoquer l'erreur.

    En voulant t'aider !

    A+

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut
    Salut,

    Voici un extrait de mon code :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    //---------------------------------------------------------------------------
    void __fastcall TGestionFrm::BonsLivraisonParClientClick(TObject *Sender)
    {
            Piece("WHERE CODE=:CODE AND TYPEP=3","Bons de livraison clients", "Client",3, 1, 1,5,150,544,456,80);
    }
    //---------------------------------------------------------------------------
    void __fastcall TGestionFrm::Piece(String xWhere,AnsiString FenCaption, AnsiString FenLBCpte, ushort p,
            ushort Sec, ushort xTypeCpte, ushort NbreCol, ushort LeftTotMnt1,ushort FenWidth, ushort GRListeWidth, ushort LeftTotaux)
    {
    // try
    // {
     
        DModule->Divers->Open();
        TPieceFrm *Fen=NULL;
        Fen = new TPieceFrm(this);
        xCode=DModule->CompteCODE->Value;
        Fen->GRListePieces->Width=GRListeWidth;
        DModule->Compte->Close();
        DModule->Compte->SelectSQL->Strings[2]="where typecpte=:pTypeCpte and afflst=1"; //code<>'C0000' and
        DModule->Compte->SelectSQL->Strings[3]="order by nom";
        DModule->Compte->ParamByName("pTypeCpte")->AsInteger=xTypeCpte;
     
        DModule->Piece->Close();
        DModule->Piece->SelectSQL->Strings[2]="join v_0021 b on a.code=b.code1";
        DModule->Piece->SelectSQL->Strings[3]=xWhere;
    		.
    		.
    		.
     
        if (Sec==4)
            DModule->Piece->DataSource=NULL;
        else
            DModule->Piece->DataSource=DModule->DSCompte;
        DModule->Compte->Open();
     
        DModule->CalculTotaux(xCode);
        DModule->Piece->Open();
     
        Fen->Caption=FenCaption;
        DModule->Compte->Close();
        DModule->Compte->Open();
        Fen->ShowModal();
        Fen->DestroyComponents();
        Fen=NULL; delete Fen;
     /*}
     catch(...)
     {
         return;
     }*/ 
     
     
     
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TPieceFrm::NouvellePieceClick(TObject *Sender)
    {
       	String xCode=DModule->CompteCODE->Value;
    	SaisiePiece(1, xCode, "");
     
    }
    //-----------------------------------------------------------------------------
    void __fastcall TPieceFrm::SaisiePiece(ushort u, String xCode, String xCdmvt)
    {
            DModule->Facture->Close();
            DModule->Lignes->Close();
            DModule->Livraison->Close();
     
            TAffPieceFrm *Fen1=NULL;
    	Fen1 = new TAffPieceFrm(this);
     
    	Fen1->ShowModal();
            Fen1->Release();
            TLocateOptions Opts; Opts.Clear(); Opts << loPartialKey << loCaseInsensitive;
            DModule->Piece->Locate("CDMVT",xCdmvt,Opts);
    }
    //---------------------------------------------------------------------------
    void __fastcall TAffPieceFrm::DBGridLignesKeyUp(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
       try
       {   
     
            if (Key==VK_F5) //Liste des articles
            {
                    TRechercheFrm *FenRech=NULL;
                    FenRech = new TRechercheFrm(this);
                    FenRech->Caption = "Choix d'article";
                    DModule->Articles->Open();
                    FenRech->DataSource->DataSet=DModule->Articles;
                    DModule->CountArt->SQL->Strings[1]="";
                    DModule->CountArt->Open();
                    FenRech->EditRecherche1->Text="";
                    FenRech->ShowModal();
                    FenRech->DestroyComponents();
                    FenRech=NULL; delete FenRech;
                    //ShowMessage("eeeeee");
                    //FenRech=NULL; delete FenRech;
                    DBGridLignes->SelectedIndex=4;
                    //SendMessage(DBGridLignes->Handle,WM_KEYDOWN, VK_RIGHT,1);
            }
     
       }
       catch(...)
       {
       } 
    }
    //---------------------------------------------------------------------------
    void __fastcall TRechercheFrm::OKBtnClick(TObject *Sender)
    {
            DModule->MouvTemp->Edit();
            DModule->MouvTempCDART->Value = DModule->ArticlesCDART->Value;
            DModule->MouvTempDESIGN1->Value = DModule->ArticlesDESIGN1->Value;
           // DestroyComponents(); //Cette commande retourn un message d'erreur et bloque le prg
            Close();
    }
    //---------------------------------------------------------------------------
    void __fastcall TRechercheFrm::NouveauClick(TObject *Sender)
    {
    	===> Création de nouvelle article
            TMajArtFrm *FenArt=NULL;
            FenArt = new TMajArtFrm(this);
            FenArt->Top=100;
            FenArt->Caption="Fiche article";
            DModule->Article->Close();
            DModule->Article->SelectSQL->Strings[2]="WHERE CDART LIKE :xParam or DESIGN1 LIKE :xParam"; // AND TYPEART=1
            DModule->Article->SelectSQL->Strings[3]="ORDER BY cdart";
            DModule->Article->ParamByName("xParam")->AsString="%%";
            DModule->Article->Open();
            DModule->Article->Last();
            DModule->Article->Insert();
     
            FenArt->ShowModal();
            FenArt->DestroyComponents();
            FenArt=NULL; delete FenArt;
            Close();
    }
    //---------------------------------------------------------------------------

  6. #6
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Fen1 = new TAffPieceFrm(this);
    Vérifier si (à défaut de delete) on a Fen1->Close() (en réponse à new) avec Action = caFree dans sa OnClose

    // DestroyComponents(); //Cette commande retourn un message d'erreur et bloque le prg
    Close();
    << normalement détruit ses composants si Action = caFree dans sa OnClose

    FenArt = new TMajArtFrm(this);
    puis :
    FenArt->ShowModal();
    FenArt->DestroyComponents(); <<< Comme mentionné avant == inutile
    FenArt=NULL;
    delete FenArt;
    <<< Impossible puisque FenArt est NULL, donc FenArt n'est jamais détruit
    Close();

    En fait, il faut vérifier toutes ces instanciations d'objets et leur destruction.
    Tout objet dérivé de TComponent détruit les objets dérivés de TComponent dont il est propriétaire.

    A plus !

Discussions similaires

  1. [Liferay] Profiler pour problème de Out Of Memory
    Par Samaël63 dans le forum Portails
    Réponses: 0
    Dernier message: 22/06/2009, 12h06
  2. Problème de out of memory
    Par dodobn dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 2
    Dernier message: 08/06/2009, 01h13
  3. problème c:out dans un display:column
    Par fakhita dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 20/07/2007, 08h37
  4. [Out of Memory] Problème
    Par matt67 dans le forum MATLAB
    Réponses: 19
    Dernier message: 19/06/2007, 13h35
  5. [Linux]Problème System.out.println + compiler
    Par Dnx dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 21/09/2004, 22h05

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