![]() |
Delphi-Version: 2007
EAccessViolation bei Array of TPoint
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 --------------------------- |
AW: EAccessViolation bei Array of TPoint
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 |
AW: EAccessViolation bei Array of TPoint
wie kann ich den array dynamisch machen, damit ich nicht erst überprüfen muss, ob der bereich existiert?
|
AW: EAccessViolation bei Array of TPoint
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 |
AW: EAccessViolation bei Array of TPoint
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. |
AW: EAccessViolation bei Array of TPoint
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? |
AW: EAccessViolation bei Array of TPoint
|
AW: EAccessViolation bei Array of TPoint
Zitat:
Zitat:
Bernhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 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