![]() |
Units...Access Violation...Sonderbar
Hallo,
falls der Titel etwas merkwürdig und nichtssagend wirkt, dass liegt daran das mein Problem mir nichts sagt und ich keine Ahnung hab woran es liegen könnte. Ich habe eine extra unit Shake, in der ich die Function Full aufrufe, mit den Werten x=320,y=371,co=0.
Delphi-Quellcode:
Die Werte werden auch richtig von der Funktion übernommen, aber in der zeile die ich als Problem markiert habe wird der Wert von co, aus 0 zu 267313069 und ich bekomme meine Standard-Fehlermeldung:
function Full(x:integer;y:integer;co:integer):integer;
begin while ((Shake.P[co].x=1025) and (co<31)) do co:=co+1; // <<Problem if (co>30) then Full:=co else begin Shake.P[co].x:=x; Shake.P[co].y:=y; Shake.P[co+1].x:=0; Full:=co; end; end; EAccesViolation...Zugriffsverletzung bei Adresse 0044136F in Modul 'Project1.exe'. Lesen von Adresse 0000C0C3. was kann das nur sein warum verändert der einfach ungefrag meinen Wert, das geht doch nicht, was mach ich nur falsch? Ich bin echt verzweifelt :wall: :gruebel: :x :( :kotz: :wiejetzt: :?: danke schonmal im voraus MFG Flippo |
Re: Units...Access Violation...Sonderbar
Wenn es sich bei P um ein Objekt handelt, ist dieses möglicherweise nicht erzeugt worden?
|
Re: Units...Access Violation...Sonderbar
Delphi-Quellcode:
also clear wird im Programm vorher aufgerufen also sollte p doch eigentlich erzeugt sein oder, bin mir jetzz wo du das so sagst nichtmehr ganz sicher?
unit Shake;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type tMaus=class public x:integer; y:integer; end; procedure Clear; function Full(x:integer;y:integer;co:integer):integer; var P: array [1..30] of tMaus; i:integer; implementation procedure Clear; begin for i:= 1 to 30 do begin P[i]:=tMaus.create; P[i].x:=1025; end; end; function Full(x:integer;y:integer;co:integer):integer; begin while ((Shake.P[co+1].x=1025) and (co<31)) do co:=co+1;//Geändert damit ich nicht auf 0 usw. if (co>30) then Full:=co else begin Shake.P[co].x:=x; Shake.P[co].y:=y; Shake.P[co+1].x:=0; Full:=co; end; end; end. |
Re: Units...Access Violation...Sonderbar
Überleg doch mal: die Indizes deines Arrays gehen von 1 bis 30, du willst auf 0 zugreifen...
|
Re: Units...Access Violation...Sonderbar
Aus dem Grund sollte ein Array immer mit dem Index 0 beginnen.
|
Re: Units...Access Violation...Sonderbar
Zitat:
bzw. dieser Fehler ist es nicht |
Re: Units...Access Violation...Sonderbar
Doch, in der ersten Schleifenprüfung ist co doch noch nicht inkrementiert, und damit hat Khabarakh recht.
|
Re: Units...Access Violation...Sonderbar
ja schon hab ich ja auch geändert, aber was ich damit sagen wollte ist, dass das leider nicht den Fehler produziert den ich meinte. (ist mir halt zwischengerutscht weil ich dauernd was verändert hab) :oops:
|
Re: Units...Access Violation...Sonderbar
Dafür wird er dir jetzt im 30. Schleifendurchlauf abschmieren--aus dem gleichen Grund (Indizierung außerhalb der zulässigen Reichweite).
|
Re: Units...Access Violation...Sonderbar
Ok jetz habbichs auch endlich kapiert, warn gleich zwei Denkfehler, die 31 war auchnoch zu groß nu kommt nixmehr.
Dankeschön |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz