aw3
Messages postés2Date d'inscriptionlundi 29 octobre 2007StatutMembreDernière intervention 9 juin 2009
-
2 janv. 2009 à 22:04
aw3
Messages postés2Date d'inscriptionlundi 29 octobre 2007StatutMembreDernière intervention 9 juin 2009
-
2 janv. 2009 à 22:38
Bonjour, j'ai un problème actuellement avec mon pathfinder (A*).
En effet lorsque je compile, tout se passe bien, mais dès que j'ouvre le programme, il m'affiche "Violation d'adresse à l'adresse 004..."
Après une recherche sur google, une possibilité d'explication qui m'est proposée est qu'un emplacement mémoire est utilisé sans avoir été réservé.
Je ne vois pas du tout comment traiter ce problème, restant un petit nouveau dans le monde du Delphi.
Donc si vous pouviez avoir l'amabilité de m'expliquer comment résoudre ce problème, je serais ravi :)
Note: l'algorithme n'est pour l'instant pas du tout optimisé, et le but de ma demande n'est pas de vous demander de l'améliorer pour moi. Néanmoins si vous avez des propositions je serais preneur
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 2 janv. 2009 à 22:34
procedure Tgrille.Button_quitterClick(Sender: TObject);
begin
Application.Terminate; //On quitte l'application
end;
En faisant ça tu "détruis" ton application, genre coup de fusil à pompe, sans même libérer tes objets.
Si la VA occure quand tu ferme l'application, pense bien à libérer tous tes objets :
procedure Tgrille.Button_quitterClick(Sender: TObject);
begin
Self.Open.Free;
Self.Close.Free; // Libération des objets (j'en ai peut-être oublié)
Self.Path.Free;
PathFind.Free;
Application.Terminate;
end;
Une autre chose : tu crées deux fois le même objet :
Ligne 159 : Self.path := TnodeList.Create;
Ligne 537 : Self.path := TnodeList.Create;
C'est probablement à cause de la libération des objets que ça merde.
Essaye toujours, tu DOIS libérer tes objets, sinon fuites de mémoire (oui comme les couches).
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 2 janv. 2009 à 22:27
En effet une violation d'accès est une tentative d'accès à une adresse mémoire qui n'appartient pas à la pile de ton programme, ou qui n'a pas encore été réservée.
Pourrais-tu nous fournir le code de ton algorithme ?
Sinon vérifie tous tes pointeurs (tableaux dynamiques, etc ...).
N'oublie pas de faire un SetLength pour définir la taille d'un tableau dynamique.
Pense bien à libérer tes objets ... si tu oublies un Free après un Create, au deuxième appel de Create tu aurais une VA (Violation d'accès).
Bonne chance, et passe-nous le code on pourra mieux t'aider.
aw3
Messages postés2Date d'inscriptionlundi 29 octobre 2007StatutMembreDernière intervention 9 juin 2009 2 janv. 2009 à 22:38
Merci beaucoup Bacterius pour tes précieux conseils.
Je vais mijoter tout cela dès maintenant :)
Pour ce qui est des libérations, c'est vrai que ca me parait logique maintenant, mais je n'y aurais pas pensé du tout.
Merci encore