![]() |
Fehler bei der Bereichsprüfung
Ich hab zwar schon die DP durchsucht, aber irgendwie war nicht das erhoffte dabei :?
Ich hab folgendes Problem: Ich hab mir zwei eigene Typen definiert, der erste ist ein (statisches) 3D-Array of integer, und der andere ist ein (dynamisches) 2D-Array vom ersten Typ (seht ihr unten gleich). Ich hab also das hier:
Delphi-Quellcode:
Dann versuche ich, einer Variable vom Typ TUltiType2 eine Quadrat-Form zu verpassen, also nutze ich
type
TUltiType1 = array[0..255, 0..255, 0..255] of integer; TUltiType2 = array of array of TUltiType1;
Delphi-Quellcode:
Es lässt sich kompilieren, alles gut, wenn ich dann aber den Code aufrufe (z.B. mit nem Button), kommt ne Fehlermeldung "Fehler bei Bereichsprüfung".
var UltiVar: TUltiType2;
... Setlength(UltiVar, 34, 34); Aber ich muss doch die Länge von meinem eigenen Array-Typ setzen können, oder? :gruebel: Ich hoff enfach mal, ihr wisst warum und könnt mir helfen ;) |
Re: Fehler bei der Bereichsprüfung
Juhu, noch einer der dieses Problem hat :mrgreen: Ich hab da vor nem Jahr ewig rumgesucht, bis ich diese Compileranweisung gefunden habe:
Delphi-Quellcode:
Sollte gehen!
{$RANGECHECKS OFF}
|
Re: Fehler bei der Bereichsprüfung
Warum den Umstand, bereichprüfung kann man doch auch manuell in den Optionen abschalten!
|
Re: Fehler bei der Bereichsprüfung
Oder einfach in den Projektoptionen einstellen. :mrgreen:
Hey keine Warnung über neue Posts? :gruebel: |
Re: Fehler bei der Bereichsprüfung
Moin!
Es ist immer wieder geil zu sehen wie kommende Programmierer mit Hinweisen auf Fehlern umgehen: Einfach die Meldung der Fehler abstellen... Wegschauen ist keine Lösung!! Das Programm meldet euch, dass ihr auf ein nicht existierendes Element zugreift, also der Index ausserhalb des zulässigen Bereiches ist und ihr ignoriert das noch mutwilliger durch abschalten der Meldung. Klasse! Anstatt den Fehler zu beseitigen... Ihr wollt wohl alle mal bei M$ anfangen, wah? :zwinker: MfG Muetze1 |
Re: Fehler bei der Bereichsprüfung
Der Fehler scheint in dem Code zu liegen, der den Zugriff macht.
Eventuell handelt es sich um den Standardfehler off-by-one, z.B. Zugriff auf Element 34. |
Re: Fehler bei der Bereichsprüfung
Zitat:
Gruß |
Re: Fehler bei der Bereichsprüfung
Zitat:
PS: In vielen Units (z.B. GR32) muss wegen der [0..0]-Konstrukte die Bereichsprüfung ausgeschaltet sein, hier stehen dann die Compilerschalter schon drin. |
Re: Fehler bei der Bereichsprüfung
OK, danke moritz, ich probiers gleich mal aus. :-)
Was mich aber wundert, ist, dass ich bei "Bereichsprüfung" das Häkchen nicht gesetzt hatte :? Ich ergänze mich: klappt net :mrgreen: Imer noch exakt der gleiche Fehler :? Hier mal der ganze Code zum "Selber-Nachvollziehen" *g*
Delphi-Quellcode:
Egal, ob ich in den Projektoptionen den Haken setze, oder nicht, und egal ob ich {$Rangechecks off} schreibe oder nicht, es kommt immer dieser Fehler.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, jpeg; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TUltiType1 = array[0..255, 0..255, 0..255] of integer; TUltiType2 = array of array of TUltiType1; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var UBla: TUltiType2; i: integer; begin {$Rangechecks off} SetLength(UBla, 34, 34); end; end. Aber der Compiler meldet nix. Hilfe? :? |
Re: Fehler bei der Bereichsprüfung
Das hat mich auch schon viel Geduld gekostet :mrgreen: :
Du musst das Projekt erstellen, statt nur zu kompilieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 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