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

Delphi Discussion :

Erreur EInvalidPointer à la sortie du programme


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut Erreur EInvalidPointer à la sortie du programme
    Bonjour,
    J'obtiens une erreur EInvalidPointer quand je quitte le programme alors que tout fonctionne parfaitement???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ArrivedGrid.clearAll;
    ArrivedGrid.rowcount:=1;
     
    for r := 1 to SiteAll.RowCount-1 do
        if (SiteAll.cells[10,r]<>'') AND (SiteAll.cells[11,r]<>'')   then
        begin
        ArrivedGrid.RowCount:=ArrivedGrid.RowCount+1;
        ArrivedGrid.Rows[ArrivedGrid.RowCount-1]:=SiteAll.rows[r];
        SiteAll.RowHeights[r]:=0;   //0
        end;
        ArrivedGrid.Refresh;
    Il semble que ce soit la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrivedGrid.Rows[ArrivedGrid.RowCount-1]:=SiteAll.rows[r];
    qui pose problème...
    Qui a une idée?

    Merci
    PhilLU

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 101
    Par défaut
    EInvalidPointer c'est en général la libération d'un pointeur déjà libéré
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut
    Merci ShaiLeTroll,
    Je ne libère jamais rien, à ma connaissance...

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 101
    Par défaut
    Le problème n'est pas forcément où tu crois
    une boucle sur un tableau, tu écris trop loin en mémoire, la zone modifiée à tort contient une adresse (un pointeur, un objet, une string) et lors de la libération cela lit cette zone qui ne contient plus les bonnes infos, tu te retrouves avec ce genre d'erreur
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut
    Toujours pas trouvé
    En fait dans le code mentionné, si je supprime la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrivedGrid.Rows[ArrivedGrid.RowCount-1]:=SiteAll.rows[r];
    ...je n'ai plus le problème?!?

    En fait, sur un timer je déclenche ce code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ArrivedGrid.clearAll;
    ArrivedGrid.rowcount:=1;
     
    for r := 1 to SiteAll.RowCount-1 do
        if (SiteAll.cells[10,r]<>'') AND (SiteAll.cells[11,r]<>'')   then
        begin
        ArrivedGrid.RowCount:=ArrivedGrid.RowCount+1;
        ArrivedGrid.Rows[ArrivedGrid.RowCount-1]:=SiteAll.rows[r];
        SiteAll.RowHeights[r]:=0;   //0
        end;
    Le but est de réinitialiser la grille ArrivedGrid dans laquelle je copie certaines lignes de la grille SiteAll.
    Accessoirement, je masque la ligne d'origine en modifiant la hauteur de la ligne à 0. (mais la suppression de cette ligne de code n'arrange rien)

    le début de ce code est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ArrivedGrid.clearAll;
    ArrivedGrid.rowcount:=1;
    J'ai essayé d'autres options mais sans résultat.

    comme par exemple ajouter ces mêmes lignes ci-dessus dans Form.Close.

    Après le plantage le pointeur est arrêté sur ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     if not (csDestroying in ComponentState) then
          begin
            if Cells[rc,j] <> '' then
            begin
              Cells[rc,j] := '';
              if rc <> i then
                RepaintCell(i,j);
            end;
          end;
    Merci pour vos idées

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 940
    Billets dans le blog
    6
    Par défaut
    Quand tu quittes le programme, le Timer a-t-il bien été désactivé, ou son code OnTimer cherche-t-il à ajouter une ligne à une grille qui a déjà été libérée par la fiche ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 543
    Billets dans le blog
    10
    Par défaut
    Tu peux utiliser aussi la fonction "if assigned"

Discussions similaires

  1. Pas d'erreur au debugage mais le programme freeze
    Par bob2356 dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 25/09/2006, 19h16
  2. [Tableaux] erreur bbcode pour sortie
    Par speedylol dans le forum Langage
    Réponses: 2
    Dernier message: 02/09/2006, 22h51
  3. Erreur à la sortie du programme
    Par Sachiel31 dans le forum C++
    Réponses: 19
    Dernier message: 26/07/2006, 09h47
  4. petit problème de sortie de programme
    Par clampin dans le forum C
    Réponses: 2
    Dernier message: 17/06/2006, 11h51
  5. [TP] Erreur au lancement d'un programme PASCAL
    Par rogerone dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 18/08/2005, 15h54

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