Erreur Pointeur en quittant l'application

antares90 Messages postés 3 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 6 mai 2004 - 5 mai 2004 à 11:45
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 6 mai 2004 à 10:21
Bonjour,
Je corrige une application sous Delphi, mais je suis un peu novice en la matière.
J'ai un message d'erreur lorsque je quitte l'application:
"Opération de pointeur incorrecte"

Or, je n'ai pas de pointeurs...
J'ai essayé quelques méthodes pour terminer mon appli correctement :
Application.Terminate;
Form1.Free;
...
mais il plante sur ces lignes.

Si vous avez une solution, répondez moi. Ou alors, est-ce possible de ne pas affciher ce message d'erreur pour l'utilisateur?

5 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
5 mai 2004 à 14:40
Bien qu'on n'ait pas l'impression de manipuler des pointeurs avec Delphi, on en manipule pourtant. Tout comme ne Java, on appelle ça des références. Voilà qui nous distingue du monde du C. :big)
Pour en revenir au code que tu affiches ci-dessus, il faut savoir que l'appel de la méthode Terminate sur l'objet Application a pour effet de détruire la fiche principale avant de se détruire lui-même.
Ainsi, si tu appelle Free sur Form1 après, tu essaies donc de détruire un objet qui n'existe déjà plus. Form1 est une référence (autrement dit un pointeur bien que la syntaxe ne le laisse pas apparaître) et utiliser un pointeur non initialisé te conduit tout droit à l'apparition du message : "Opération de pointeur incorrecte".
Supprime donc la deuxième ligne ci-dessus et tout rentrera dans l'ordre.
Il ne doit plus y avoir d'actions après Application.Terminate.
May Delphi be with you
0
antares90 Messages postés 3 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 6 mai 2004
5 mai 2004 à 15:06
en fait, je n'avais pas écris ces 2 lignes à la suite, j'ai écris tout à la fin de mon programme soit l'une, soit l'autre, mais dans les 2 cas, je tombe sur la même erreur...
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
5 mai 2004 à 18:52
Remplace Application.Terminate par un appel à Close sur la fiche principale.
Question complémentaire : quel code y a t-il dans OnClose de la fiche principale ?
May Delphi be with you
0
antares90 Messages postés 3 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 6 mai 2004
6 mai 2004 à 09:28
Dans OnClose, il y a une exécution de requete SQL, puis Application.Terminate car j'avais laissé celui-là finalement.
Donc si je fais un close de la fiche principale, on revient au meme probleme...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
6 mai 2004 à 10:21
Arrête de mettre des Application.Terminate partout !!!

Pour fermer une application proprement et permettre de refermer les enembles de données, il faut eviter de passer par ce canal.
A la place, un appel à close sur la fiche principale permettra une fermeture propre des bases de données et d'éviter de se retrouver avec un répertoire occupé (c'est le cas avec les tables Paradox).
Dans le cas d'utilisation de paquets d'exécution, les conséquences sont les mêmes.

Quant à faire un appel à Terminate dans un évènement OnClose, là le chien se mord la queue.

Alors, sauf à bien maîtriser ce que vous faites, de grâce, évitez d'employer la méthode Terminate !

May Delphi be with you
0
Rejoignez-nous