Accueil > Forum > > > > EAccessViolation
EAccessViolation
mardi 30 octobre 2007 à 15:13:09 |
EAccessViolation

dvwyns
|
Salut tout le monde, Voila j ai un pt problème avec un jeu qui se nomme OXO... En fait le code ci-dessous est une partie d'un algo de vérification du joueur gagnant la partie. J'utilise un tableau de 8 case de type TColor dans systeme MVC... Ce code est mis dans mon modele : function SayWin(player:TColor):boolean; var cpt,ctl,i:integer; begin ctl:=0; While(ctl<>8)or(cpt<>3)do begin cpt:=0; for i:=1 to 3 do begin //verif verticale if (tab[ctl]=player) then inc(cpt); inc(ctl); end; end; if (cpt=3)then result:=true else result:=false; end; En fait quand j execute et que je clique sur une des cases du DrawGrid un message EaccesViolation apparait en rapport avec une adresse mémoire. Le probleme apparemment se situe au nv de cette condition "if (tab[ctl]=player) then" Pt présision j appelle cette fonction via mon controleur donnant la couleur courante. Je vs remercie d'avance pour votre aide... 
|
|
mardi 30 octobre 2007 à 17:09:10 |
Re : EAccessViolation

f0xi
|
function SayWin(tab: TypeDeTab; const player: TColor): boolean; var cpt, ctl, i: integer; begin ctl := 0; While (ctl <> 8) or (cpt <> 3) do begin cpt:=0; for i:= 1 to 3 do begin if tab[ctl] = player then cpt := cpt + 1; ctl := ctl + 1; end; end; result := cpt = 3; end;
|
|
mardi 30 octobre 2007 à 18:50:13 |
Re : EAccessViolation

Guillemouze
|
heu dites moi si je me trompe :
function SayWin(tab: TypeDeTab; const player: TColor): boolean; var cpt, ctl, i: integer; begin ctl := 0; ctl = 0 While (ctl <> 8) or (cpt <> 3) do equivalent a while not ( (ctl=8) and (cpt=3) ) <--- on s'arrete que si ctl=8 et cpt=3 begin cpt:=0; for i:= 1 to 3 do 3 iterations de .... begin if tab[ctl] = player then cpt := cpt + 1; ctl := ctl + 1; ... ctl = ctl+1 end; donc ici, ctl = 3, 6, 9, ... donc ctl ne vaudra jamais 8 end; result := cpt = 3; end;
|
|
mercredi 31 octobre 2007 à 08:53:35 |
Re : EAccessViolation

dvwyns
|
Salut foxi, Merci pour ta réponse mais malheureusement ca ne règle pas mon probleme, ds le sens ou il m'indique un autre probleme(surcharge non indiqué), en fait pour etre plus précis ma variable de type tableau est une variable de classe se trouvant ds mon modele donc je pensais qu'il était possible de l appeler directement ds ma fonction sans devoir le mettre ds les paramètres de la fonction...(ce que j ai fait ds d autre fonction) de plus ca serait étrange de devoir faire ca puisque j appelle alors ds mon controleur cette fonction se trouvant ds le modele donnant comme paramètres "SayWin(Modele.tab,currentplayer)" alors que cette variable s'y trouve Fin donc je suis tjs aussi perdu Pour répondre à Guillemouze, While (ctl <> 8) or (cpt <> 3) do équivaux a while not ( (ctl=8) or (cpt=3) )et ctl := ctl + 1; c'est comme si tu faisais inc(ctl) càd que tu ajoutes un en plus a chaque tour de boucle donc à un moment ca atteindra bien 8 (a part,bien sur, si cpt=3)
|
|
mercredi 31 octobre 2007 à 09:57:59 |
Re : EAccessViolation

dvwyns
|
sorry fOxi, En fait j'étais mal réveillé  , ya pas de probleme de surcharge mais bon en faisant comme tu m as indiqué, j ai tjs le meme probleme de EaccessViolation En esperant que quelconque personne puisse m aider, merci d'avance
|
|
mercredi 31 octobre 2007 à 11:20:04 |
Re : EAccessViolation

dominique.stock
|
Réponse acceptée !
Bonjour, for i:= 1 to 3 do begin if tab[ctl] = player then cpt := cpt + 1; ctl := ctl + 1; end; Dans ta boucle for, ctl dépasse 8 .... Avant de passer dans le while ...
Fais un showmessage( inttostr(ctl)) ....
Dom
|
|
mercredi 31 octobre 2007 à 12:52:51 |
Re : EAccessViolation

dvwyns
|
Merci Dom, Je n avais pas remarqué cette grosse erreur...A force de vouloir tjs tout condenser  Donc si je comprends bien ce EAccessViolation c comme en java IndexOutofBounds? cad qu'il n'acceptait pcq je sortais des limites de mon tableau
|
|
mercredi 31 octobre 2007 à 13:06:10 |
Re : EAccessViolation

Guillemouze
|
merci dom de me soutenir :) petit rappel pour dvwyns: A B -A -B AetB AouB -Aet-B -Aou-B-(AetB)-(AouB) 1 1 0 0 1 1 0 0 0 0 1 0 0 1 0 1 0 1 1 0 0 1 1 0 0 1 0 1 1 0 0 0 1 1 0 0 1 1 1 1
si a = (ctl=8) et b = (cpt=3)
ta condition (ctl<>8) or (cpt<>3) vaut -Aou-B ta condition not((ctl=8) or (cpt<>3)) vaut -(AouB) ma condition not((ctl=8) and (cpt=3)) vaut -(AetB)
on remarquera facilement que la verte et la rouge ont les memes valeurs, mais pas la rouge et la bleue !!!
A part ca, merci mais je conais a peu pres les incrementation ;) par contre je serais toi je reviserai mes boucles / blocs de commandes
|
|
mercredi 31 octobre 2007 à 13:07:40 |
Re : EAccessViolation

Guillemouze
|
EAccessViolation veut dire que tu lis dans un espace memoire que tu ne devrait. ca peut correspondre a un IndexOutOfBounds, mais aussi a plein d'autre choses (acces a une fonction d'un objet non instancié, ...)
|
|
mercredi 31 octobre 2007 à 13:21:01 |
Re : EAccessViolation

dvwyns
|
Oui donc c était bien ca merci encore Dom... J ai completement changé mon code, voila le résultat : function SayWin(player:TColor):boolean; var i,j,k,cpt:integer; findwinner:boolean; begin i:=0;j:=1;k:=2; findwinner:=false; cpt:=1; While not(findwinner)and (cpt<>3) do begin inc(cpt); if ((tab[i]=player) and (tab[j]=player) and (tab[k]=player)) then begin result:=true; findwinner:=true; end else begin i:=i+3;j:=j+3;k:=k+3; result:=false; end; end; Bon bien sur c est vite fait et juste pour une verif. verticale ++
|
|
Cette discussion est classée dans : player, begin, cpt, ctl, if
Répondre à ce message
Sujets en rapport avec ce message
SetFocus sur Controls[i] impossible ! [ par NESTORORG ]
J'ai une Form1 contenant : x controls "TEdit"et y controls "Button"je voudrais que le focus passe sur le control[x+1] à chaque pression de la touche "
Valeur in TList ? prob pointeur [ par Bruto ]
Je voudrais déterminer si une string est contenue dans un obje TList mais le problème des pointeurs se posent. Voici mon code.Les objets TList ne me p
Question aux internautes [ par Bacterius ]
Bonjour, je voudrais juste savoir s'il est possible d'exprimer deux résultats d'une opération sans passer par "begin" "end" .Exemple :begin if
Spin edit [ par watrem ]
bonjour , certainement suite a une mauvaise manip j'ai une erreur dans le "source" du spin edit , j'ai reinstaller delphi et l'erreur est toujours pre
Error E/S 32 sur ecriture et suppresion [ par te56350 ]
slt tt le mondej'Ai besoin d'une solution pour mon projet en cour SVPMon projet gère des comptes utilisAteurs Et qu'An j'enregistre des comptes çA fon
Creation de processus [ par User8 ]
Bonjour, j'ai créé un objet permettant de lancer une application. Celui ci créé le process puis va lire son état à chaque top d'un timer. Des événeme
image [ par smail002 ]
salut tous ya til un petie code source pour se proget j ai trau d image dan mon proget il ya tout model mobile nokia stp donne moi tou simple c
supprimer une ligne dans un fichier texte [ par grod0026 ]
bonsoir voila j essaye de supprimer une ligne dans un fichier texte, Donc j'ouvre mon fichier original et le temporaire. si l'enregistrement est égal
ADOQuery.lookup et résultat null [ par othland ]
Bonjour à tous, pouvez vous m'aider sur un problème relatif au résultat null envoyé par un ADOQuery.lookup?????[^^confus5] j'ai essayé : if (ADOQuery1
Tri d'une wwDBGrid [ par vincedelphi ]
bonjour, voila j'utilise une procédure me permettant faire un tri croissant/décroissant dans un wwDBGrid (rattachée à une ibTable): procedure DoSort
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|