Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler bei der Bereichsprüfung (https://www.delphipraxis.net/43867-fehler-bei-der-bereichspruefung.html)

Ultimator 9. Apr 2005 22:21


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:
type
  TUltiType1 = array[0..255, 0..255, 0..255] of integer;
  TUltiType2 = array of array of TUltiType1;
Dann versuche ich, einer Variable vom Typ TUltiType2 eine Quadrat-Form zu verpassen, also nutze ich
Delphi-Quellcode:
var UltiVar: TUltiType2;
...
Setlength(UltiVar, 34, 34);
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".

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 ;)

moritz 9. Apr 2005 22:53

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:
{$RANGECHECKS OFF}
Sollte gehen!

Speedmaster 9. Apr 2005 22:57

Re: Fehler bei der Bereichsprüfung
 
Warum den Umstand, bereichprüfung kann man doch auch manuell in den Optionen abschalten!

Robert_G 9. Apr 2005 23:01

Re: Fehler bei der Bereichsprüfung
 
Oder einfach in den Projektoptionen einstellen. :mrgreen:

Hey keine Warnung über neue Posts? :gruebel:

Muetze1 10. Apr 2005 00:12

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

marabu 10. Apr 2005 07:58

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.

moritz 10. Apr 2005 09:04

Re: Fehler bei der Bereichsprüfung
 
Zitat:

Zitat von Muetze1
Es ist immer wieder geil zu sehen wie kommende Programmierer mit Hinweisen auf Fehlern umgehen: Einfach die Meldung der Fehler abstellen...

Das ist mir schon klar. Was allerdings, wenn du den Fehler auf Teufel komm raus nicht findet, und jeden Tag 3 Mails erhält, dass das Programm dieses komischen Fehler liefert? Es gab ja kein Problem im Programmablauf.

Gruß

Khabarakh 10. Apr 2005 10:30

Re: Fehler bei der Bereichsprüfung
 
Zitat:

Zitat von moritz
Zitat:

Zitat von Muetze1
Es ist immer wieder geil zu sehen wie kommende Programmierer mit Hinweisen auf Fehlern umgehen: Einfach die Meldung der Fehler abstellen...

Das ist mir schon klar. Was allerdings, wenn du den Fehler auf Teufel komm raus nicht findet, und jeden Tag 3 Mails erhält, dass das Programm dieses komischen Fehler liefert? Es gab ja kein Problem im Programmablauf.

Gruß

Im fertigen Programm sollte man die Überprüfungen immer abschalten, verlangsamt nur das Programm. Natürlich vorausgesetzt, dass das Programm stabil läuft.

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.

Ultimator 10. Apr 2005 10:36

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:
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.
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.
Aber der Compiler meldet nix.

Hilfe? :?

Khabarakh 10. Apr 2005 10:41

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.
Seite 1 von 2  1 2      

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