AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EAccessViolation bei Array of TPoint

Offene Frage von "rollstuhlfahrer"
Ein Thema von 404 Deleded · begonnen am 17. Jul 2010 · letzter Beitrag vom 18. Jul 2010
Antwort Antwort
404 Deleded

Registriert seit: 27. Nov 2009
3 Beiträge
 
Delphi 7 Personal
 
#1

EAccessViolation bei Array of TPoint

  Alt 17. Jul 2010, 17:43
Delphi-Version: 2007
Ich habe bei einem Programm folgendes Problem:
Die Mainform ruft eine andere Form auf
Die Zweite Form schreibt eine Cursorposition in einen als public definierten Array of TPoint
Doch immer wenn das Programm auf den Array zugreifen will, kommt nur folgendes:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00459E74 in Modul 'Project1.exe'. Schreiben von Adresse 00000008'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#2

AW: EAccessViolation bei Array of TPoint

  Alt 17. Jul 2010, 17:49
Hast du mal mit Length() überprüft, ob die Position, an die du schreiben willst, auch existiert?

EDIT: Ansonsten mal die Bereichsprüfung in den Projektoptionen aktivieren.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
404 Deleded

Registriert seit: 27. Nov 2009
3 Beiträge
 
Delphi 7 Personal
 
#3

AW: EAccessViolation bei Array of TPoint

  Alt 17. Jul 2010, 18:03
wie kann ich den array dynamisch machen, damit ich nicht erst überprüfen muss, ob der bereich existiert?
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#4

AW: EAccessViolation bei Array of TPoint

  Alt 17. Jul 2010, 18:25
Darum ging es mir nicht. Ich tippe darauf, dass du auf ein nicht existierendes Element des Array zugreifen willst. Dies endet typischerweise mit einer AV. Wenn du ein statisches Array hast (array[Start..Ende] of Typ) dann hast du deine festen Elemente und kannst auch nur auf diese zugreifen. Wenn du ein dynamisches Array nimmst (array of Typ) dann hat das Array von Anfang an 0 Elemente und du musst erst mit Hilfe von SetLength() das Array aufspannen. Wenn du eine Liste haben willst, ist es einfacher, die Klasse TList zu vergewaltigen als einem Array beizubringen, selbständig zu wachsen. (Wenn du nur willst, dass das Array wächst und nicht zwischendrin Elemente rausnehmen willst, ist es mit SetLength() doch einfacher).
Mit Hilfe von ShowMessage(IntToStr(Length(DeinArray))); kannst du auslesen, wie viele Elemente das Array hat und du kannst berechnen, auf welches du zugreifen willst (Achtung: dynamische Arrays fangen mit Index = 0 an!). Wenn der berechnete Wert größer ist als die Anzahl der Elemente - 1 (für das 0. Element), dann greifst du ins Leere und der Computer mag das gar nicht.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: EAccessViolation bei Array of TPoint

  Alt 17. Jul 2010, 19:22
Wie wäre es, wenn man einfach mal die Bereichsprüfung in den Projektoptionen aktiviert und so schaut ob's wirklich am Index liegt?

PS: Genau deswegen wäre es mir lieb, wenn in Delphi sowas standardmäßig aktiviert wäre.
$2B or not $2B
  Mit Zitat antworten Zitat
404 Deleded

Registriert seit: 27. Nov 2009
3 Beiträge
 
Delphi 7 Personal
 
#6

AW: EAccessViolation bei Array of TPoint

  Alt 17. Jul 2010, 19:40
Hallo,
danke für die schnellen Antworten.
Die Bereichsprüfung hat nichts gebracht.
Ich habe inzwischen den Array zu einem Statischen Array gemacht.
Kann man mit SetLength() auch mit einer bestimmten angabe einfach eines dranhängen?

Mit einem Statischen Array funktioniert es. Habe einfach den minimal/maximal Wert auf 1-100 gestellt und den stat. Array auf [0..101]. Damit kann es eig. keine Probleme geben, oder?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

AW: EAccessViolation bei Array of TPoint

  Alt 17. Jul 2010, 19:48
Kann man mit SetLength() auch mit einer bestimmten angabe einfach eines dranhängen?
Delphi-Referenz durchsuchenLength + etwas Mathe + Delphi-Referenz durchsuchenSetLength ?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#8

AW: EAccessViolation bei Array of TPoint

  Alt 18. Jul 2010, 19:16
Habe einfach den minimal/maximal Wert auf 1-100 gestellt und den stat. Array auf [0..101].
Wo wir schon bei Mathematik sind: 1-100 sind 100 Elemente, 0-101 sind 102 Elemente. Wenn du das Array schon statisch machst, dann brauchst du nicht wie bei Aufnahmen aus dem Fernsehen einen Vor- und Nachlauf. Das ist nur unnötig vergeudeter Arbeitsspeicher.

Kann man mit SetLength() auch mit einer bestimmten angabe einfach eines dranhängen?
Wenn du ein statisches Array meinst, dann nein. Statisch ist statisch und nun nicht mal einfach eben so hier mal dynamisch.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz