begin process at 2012 02 11 08:05:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Système

 > 

Autre

 > 

Message d'erreur, api windows ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Message d'erreur, api windows ?

jeudi 11 octobre 2007 à 16:12:33 | Message d'erreur, api windows ?

lotfi213_b19

bonjour a tous, j'aimerais bien savoir la raison du message d'erreur : Violation d'acces a l'addresse 0000000000 dans le module "project1.exe" surtout dans les applcations utilisant les api windows merci d'avance
jeudi 11 octobre 2007 à 16:13:40 | Re : AIDEZ MOI SVP

lotfi213_b19

d'autre facon,je demande plus de details sur ce genre de problemes merci
jeudi 11 octobre 2007 à 16:29:52 | Re : AIDEZ MOI SVP

dominique.stock

Bonjour,
Ce sont des objets créés mais pas libérés en général ....
Si tu fais un pas à pas , cela peut te permettre de trouver l'erreur.
Sinon, utilises quelque chose comme Memcheck ...

Dom
jeudi 11 octobre 2007 à 18:50:04 | Re : AIDEZ MOI SVP

Guillemouze

c'est que tu (ou l'api windows) essaye d'acceder a des pointeurs nil (=0).
Verifie que tu utilise correctement les fonctions de l'api.
Certaines fonctions necessite que tu leur passe un buffer qu'elles remplissent. si tu n'as pas initialisé le buffer, tu obtiens une erreur de ce type
jeudi 11 octobre 2007 à 19:14:38 | Re : AIDEZ MOI SVP

f0xi

Membre Club Administrateur CodeS-SourceS


Un objet non libéré ne provoque pas d'erreur ... du moins il ne le doit pas.
tant qu'une instance est valide il ne peut pas y'avoir de violation d'accés a cette derniere.

par contre, une instance non allouée ou deja libérée devient irremediablement invalide et donc un appel a une telle instance provoque immediatement une violation d'accés car l'addresse memoire ne pointe plus sur un espace memoire valide.

c'est pour cela qu'il existe des fonctions tel Assigned ou FreeAndNil ou même la valeur Nil (Null).

une reference (objet ou pointeur) doit toujours etre remis a Nil pendant l'execution d'un programme, car tant que ce n'est pas fait l'instance contient toujours une addresse memoire.
cette reference n'est rien d'autre qu'une variable qui stocke une addresse memoire sur un entier 32bit, cette addresse memoire nous permet d'acceder a un espace memoire qui vas contenir les données soit d'un objet, soit d'un type quand il s'agit d'un pointeur.

il une erreur frequente, qui aboutie sur une violation d'accés :

- l'appel d'un constructeur de classe sans assignation de son retour (appel direct de Create sans assignation) :
  "MonObjet.Create" au lieu de "MonObjet := ClasseObjet.Create" ou "With ClasseObjet.Create do"

qu'est-ce qui se passe dans ce cas :

MonObjet.Create; { on crée une reference mais elle est immediatement perdue }
MonObjet.Caption := 'oops'; { violation d'accés, MonObjet n'est pas une reference valide }
MonObjet.Free; { violation d'accés, MonObjet n'est pas une reference valide }

par contre :

MonObjet := ClasseObjet.Create; { on crée une reference est elle est assignée a MonObjet }
MonObjet.Caption := 'ouf!'; { pas de probleme }
MonObjet.Free; { pas de probleme ici non plus }
MonObjet.Caption := 'i''m an idiot!'; { violation d'accés sur tentative d'accés a une instance detruite }

With ... Do fonctionne comme si on utilisait la variable MonObjet donc :

with ClasseObjet.Create do { pas de probleme }
try
  Caption := 'youpi!'; { pas de probleme }
finally { assure la certitude de la liberation }
  Free; { pas de probleme }
  Caption := 'Idée stupide'; { violation d'accés sur tentative d'accés a une instance detruite }
end;

remettre a Nil une reference permet d'effectuer un test simple avant un code, ce test permet de reduire les violation d'accés, mais on devrat toujours etre vigilant a ce que l'on fait.

on peut donc faire :

if not Assigned(MonObjet) then { assure qu'on ne vas pas ecrasser une instance existante }
  MonObjet := ClasseObjet.Create;

try
  { exploitation de MonObjet }
finally
  FreeAndNil(MonObjet); { libere et remet a nil la reference pour assigned() }
end;
 
voila pour les objets, le concept est le même pour les pointeurs, car une reference d'objet n'est rien d'autre qu'un pointeur, a peu de choses prés.


deefsign.gif
jeudi 11 octobre 2007 à 19:21:39 | Re : AIDEZ MOI SVP

f0xi

Membre Club Administrateur CodeS-SourceS


pour les API travaillant surtout avec des pointeur ou handle il y a deux test a faire pour s'assurer qu'une reference est valide :

pour un Handle :

if MonHandle <> INVALID_HANDLE_VALUE then ... on peu l'utiliser

pour un pointeur :

if MonPointeur <> Nil then ... on peu l'utiliser

et pour un objet (rappel) :

if Assigned(MonObjet) then ... on peu l'utiliser


cela t'eviteras les problemes de violation d'accés. par contre, si ta reference a été mal libérée ou mal initialisée tu aura d'autres erreurs qui surviendront.
donc il ne faut pas oublier :
- de tester si on ne vas pas ecraser une instance existante avant de la créée.
- de tester la validitée d'une instance avant d'y acceder.
- de liberer correctement une instance (grace a Try Finally ou Try Except).
- de bien finaliser les references (par remise a Nil (pointeur et objet) ou Invalid_Handle_Value (handle, dc, hwnd))



deefsign.gif
jeudi 11 octobre 2007 à 21:09:40 | Re : AIDEZ MOI SVP

Guillemouze

tres bonne explication foxi.
mais tu as oublié de preciser un cas : la multireference.
par exemple

procedure TMonObjet.Reset; 
begin   [@UnSousObjet = $XXXX]
  Self.UnSousObjet.free; 
  ...
  Self.UnSousObjet := TSousObjet.Create; [@UnSousObjet = $YYYY]
end;

x := MonObjet.UnSousObjet [@x = $1234]
 ... traitements ...
MonObjet.Reset; [@UnSousObjet = $3456]
x.UneFonction; [@x = $1234]// la reference n'est plus valide => plantage (violation d'acces 0x00001234)

Mais dans ton cas lofti, la violation 00000000 signifie que tu essaye d'acceder un une variable non ilitialisée (nil ou NULL)
jeudi 11 octobre 2007 à 23:41:03 | Re : AIDEZ MOI SVP

JulioDelphi

Membre Club Administrateur CodeS-SourceS
Le titre du sujet n'a rien à voir avec le contenu, je supprime le thread ou je modifie le titre ?
allez, je modifie ... mais gaffe,  la prochaine fois mets un vrai titre.


Cette discussion est classée dans : message, windows, erreur, api


Répondre à ce message

Sujets en rapport avec ce message

Les Api Windows [ par twoupy ] Est-ce que quelqu'un possède ou sait où je pourrais trouver l'aide sur les Api Windows (win32.hlp) en français. ce serait bien cool, parce que l'angl fenetres bizzarres [ par ak47 ] bonjour a tous,J'ai lu dans un article qu'on pouvait faire des fenetres "bizarres" (de part leurs formes) grace a une api de windows. Malheureusement, erreur bde [ par jakouz ] bonjour,quand j' execute une appl. delphi j'ai le message d' erreur suivant,"probleme sur BDEEngineError : Nom Dupliqué dans ce contexte"mais je ne sa Messages windows [ par Gysmo ] Salut, Je n'arrive pas a faire d'operation logic sur les messages de windows de cette maniere:procedure TForm1.FormCreate(Sender: TObject);begin App Erreur : Violation d'accès à l'adresse 00482976 [ par titi29 ] Je vous énonce mon problème.Lors de l'ouverture d'un menu, un message d'erreur s'affiche environ 4 fois avant une exécution normale de tout le logicie Erreur : Violation d'accès à l'adresse 00482976 [ par titi29 ] Je vous énonce mon problème.Lors de l'ouverture d'un menu, un message d'erreur s'affiche environ 4 fois avant une exécution normale de tout le logicie les api windows [ par alami467 ] salut ...je suis entrain de construire un programme et je suis blocre bon je veux savoir ou trouver les aplication en cours d'execution 'le gestionna MESSAGE D'ERREUR [ par vinzdu95 ] je n'arrive pas à déboguer mon programme qui est pourtant assez simple. J'utilise dans celui-ci une chaîne de caractère constitué uniquement de 0 et d Message d'erreur "floating point.." sur certain pc [ par kristof708 ] slt a tousvoila, qui peut m'aider a conprendre ce qui deconneje recupere 2 valeurs ds un edit avec une virguleje dois additionner ces 2 valeurs par ex


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales