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

Langage Delphi Discussion :

message d'erreur "Mémoire insuffisante"


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut message d'erreur "Mémoire insuffisante"
    à l'éxecution d'un programme de temps en temps j'ai le message d'erreur "Mémoire insuffisante" qui se déclenche dans la routine : TFrmChq.ActLecteurExecute(Sender: TObject);

    je pense pourtant avoir libérer toutes les ressources ...

    extrait du code Delphi
    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
     
    procedure TFrmChq.ActLecteurExecute(Sender: TObject);
    var
      List     : TStringList;
    begin
      List := TStringList.Create;
      Self.Hide;
      try
          with TfrmScan.Create(Self) do
            try
              ShowModal;
            finally
              Free;
            end;
      finally
        Self.Show;
        List.Free;
      end;
    end;
     
    (*********************************************)
     
    procedure TfrmScan.FormCreate(Sender: TObject);
    begin
      If Not Assigned(dtmScan) Then dtmScan  := TdtmScan.Create(Self);
     
      frmWait := TfrmWait.Create(Application);
      try
        iLecteur:= TRds3000.CreateWithMode(Self,Mode);
      finally
        frmWait.Close;
        frmWait.Free;
        frmWait := nil;
      end;
      ms := TMemoryStream.Create;
      lRecNo := TStringList.Create;
    end;
     
    procedure TfrmScan.FormDestroy(Sender: TObject);
    begin
      If Assigned(dtmScan) Then dtmScan:=Nil;
      If Assigned(lRecNo) then lRecNo.Free;
      If Assigned(iLecteur) then ILecteur.Free;
      ms.Free;
    end;
     
    (*********************************************)
     
    constructor TRds3000.CreateWithMode(AOwner: TComponent; cMode: TMode);
    begin
       Inherited Create(AOwner);
       msFjpgImage := TMemoryStream.Create;
       msBjpgImage := TMemoryStream.Create;
       DocList := TStringList.Create;
       FStamp := TStampProps.Create;
    end;
     
    destructor TRds3000.Destroy;
    begin
      If Assigned(msFJpgImage) Then msFjpgImage.Free;
      If Assigned(msBJpgImage) Then msBjpgImage.Free;
      If Assigned(DocList)     Then DocList.Free;
      FreeAndNil(FStamp);
      Inherited Destroy;
    end;
    dans les routines ci-dessus j'ai indiqué tous les "create" et "free" ...
    auriez vous une idée svp ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 44
    Points : 52
    Points
    52
    Par défaut
    Salut,

    Dans la procédure TfrmScan.FormDestroy(Sender: TObject);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      If Assigned(dtmScan) Then dtmScan:=Nil;
    Devrait peut-être être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      If Assigned(dtmScan) Then FreeAndNil(dtmScan);
    Des outils tels que MemCheck ou MemProof peuvent également t'aider à repérer les fuites de mémoires.


    @+

  3. #3
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Assigned(dtmScan) Then dtmScan:=Nil;
    Il faudrait mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Assigned(dtmScan) Then dtmScan.free;
    Edit : Je me suis fait grillé par mduse

  4. #4
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 240
    Points : 102
    Points
    102
    Par défaut
    ok merci
    je vais récupérer MemCheck et voir comment ça marche
    car j'ai déjà utilisé MemProof mais les indications qu'il indique ne m'aide pas tellement dans le deboggage de l'application

Discussions similaires

  1. [AC-2007] Erreur 2004 Mémoire insuffisante
    Par Lionel69260 dans le forum IHM
    Réponses: 0
    Dernier message: 14/12/2009, 14h08
  2. Code erreur 7 : Mémoire insuffisante!
    Par js8bleu dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 26/07/2009, 23h15
  3. Erreur ou mémoire insuffisante Solver
    Par bbouling dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/05/2008, 13h46

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