[Delphi] problème absolument fabuleux

problème absolument fabuleux [Delphi] - Delphi/Pascal - Programmation

Marsh Posté le 23-04-2002 à 09:50:20    

Bonjour à tous...
Voilà mon problème (toujours le même d'ailleurs): j'ai une base de donnée MySQL et je fais une recherche dessus en delphi grace à la libmysql...
 
Jusqu'ici, rien d'étrange.  Quand je fais des recherches aucun problème...  Mais jusqu'ici, je lançais le projet à partir de Delphi (en appuyant sur la grosse flèche verte).  Mais bon, j'ai du donner le programme à l'utilisateur et là, si on fait de trop grosse recherche, un joli message d'erreur apparait:  
"violation d'accès à l'adresse ... dans le module bd.exe.  Lecteure de l'adresse ..."
 
Seulement voilà, si je fais la même recherche à partir de Delphi, aucun problème...  Et pire, si je fais d'abord une recherche dont le nombre de résultat est petit et que je recommence avec des critères de plus en plus vaste, aucun problème non plus!
 
Euh, ça dit quelques choses à quelqu'un???
 
Lio

Reply

Marsh Posté le 23-04-2002 à 09:50:20   

Reply

Marsh Posté le 23-04-2002 à 10:23:47    

Oui : Delphi nettoie la mémoire pour plus de facilité à debugguer. Mais en environnement réel, aucune pitié, le programme est dans la jungle "Windows" et cohabite avec des restes de vieux programmes... Il se peut qu'après une première recherche certaines variables soient initialisées, etc...
Donc vérifie que toutes tes variables sont bien initialisées, et qu'il n'y ait pas de "hint" ou de "warning" à la compilation (Project -> Build All pour refaire le test). Souvent il indique là que tu utilise une variable non initialisée.
Ce que tu peux faire dans Delphi c'est activer dans Project -> Options -> Compiler l'option "Range checking" et "Overflow checking" (juste le temps de trouver l'erreur, faut pas le laisser par après, parce que ces deux options ont tendance à un peu ralentir).

 

[jfdsdjhfuetppo]--Message édité par antp le 23-04-2002 à 10:25:19--[/jfdsdjhfuetppo]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-04-2002 à 12:15:46    

En fait, la détection d'overflow et de range sont déjà activée (mais bon, si ça ralentit, je les désactiverai)...  En fait, j'ai trouvé l'endroit exacte de l'erreur.  Lors de l'affichage des résultats, fait un fetch (instruction mysql?) de la ligne et puis il copie le pointeur réusltat (prow^) row (une autre variable d'un type bien particulier) => row := prow^;
Et c'est là que ça plante, après 198 lignes passée correctement! :o)
 
Variable non initialisée?  Ben j'y avais pensé, mais il le ferait directement non?  Pas la 199 fois qu'il passe dans la boucle...  Peut-être la taille de la pile, mais je ne sais pas comment la configurer et quelle valeur lui mettre...

Reply

Marsh Posté le 23-04-2002 à 12:42:38    

Si ça plante si loin c'est probablement que sans le faire exprès tu déborde de la zone mémoire.
Tant que tu écrases des trucs de ton programme ça va, mais dès que tu attaques la zone d'un autre programme Windows râle (encore heureux).
C'est ça le problème quand on joue avec des pointeurs :/


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 24-04-2002 à 07:19:25    

Y a 1 pb d'allocation/dealocation à mon avis là......
Moi j'avais 1 pb de ce type (mais rien à voir avec BD) et il plantait seulement quand une info bulle devait apparaitre.... et c'etait 1 truc qui n'avait rien à voir qui faisait planté....
Alors atention avec les pointeurs ! Vérifie que ton pointeur pointe bien sur qq chose d'allouer et vérifie que tout est bien créé.... (les déallocations aussi )
 :hello:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed