![]() |
Delphi-Version: 2010
Array of Boolean Problem
Hallo DPler,
ich bekomme eine Zugriffverletzung wenn ich in meinem Array of Boolean ein Feld setzen möchte. Was habe ich falsch gemacht?
Delphi-Quellcode:
type
TMyBoolArray = array[11..18] of Boolean; . . . type THandler = class(TObject) private FMyBoolArray: TMyBoolArray; {...} . . . if AValue then FMyBoolArray[AIndex] := TRUE; MfG, dnub |
AW: Array of Boolean Problem
Hallo,
Also du musst halt sicherstellen, dass AIndex zwischen 11 und 18 liegt. Du kannst
Delphi-Quellcode:
aber wahrscheinlich vereinfachen:
if AValue then
FMyBoolArray[AIndex] := TRUE;
Delphi-Quellcode:
Es sei denn du willst den Wert in dem Array NICHT auf false setzen, wenn AValue false ist.
FMyBoolArray[AIndex] := AValue;
|
AW: Array of Boolean Problem
Ich prüfe ob der Index sich zwischen den Arraygrenzen befindet - laut Debugger alles io, dennoch AV.
|
AW: Array of Boolean Problem
Zeig doch mal etwas mehr Code.
|
AW: Array of Boolean Problem
Ist die Instanz von THandler überhaupt "ordentlich" erstellt worden?
Und schalte mal in den Projektoptionen die Bereichsprüfung an. |
AW: Array of Boolean Problem
Deklaration:
Delphi-Quellcode:
Hier kommt die AV:
type
TMyBoolArray = array[11..18] of Boolean; type THandler = class(TObject) private FMyBoolArray: TMyBoolArray; public procedure SetPosition(const APos: Integer); end;
Delphi-Quellcode:
Aufruf:
procedure THandler.SetPosition(const APos: Integer);
begin if (APos>= 11) and (APos<= 18) then FMyBoolArray[APos] := TRUE; end;
Delphi-Quellcode:
procedure TMyForm.chBoxClick(Sender: TObject);
var CtrlIntCap: Integer; MyHandler: THandler; begin if Sender is TCheckBox then begin CtrlIntCap := StrToInt(TCheckBox(Sender).Caption); if (CtrlIntCap <= 18) and (CtrlIntCap >= 11) then MyHandler.SetPosition(CtrlIntCap); end; end; Zitat:
|
AW: Array of Boolean Problem
Es kann sein das AIndex in Wahrheit 'was anderes steht' wegen Optimierungen.
Prüf am besten mal so:
Delphi-Quellcode:
if (AIndex < 11) or (AIndex > 18) then
MessageDlg('AIndex fehlerhaft', mtError, [mbOK], 0); Edit:
Delphi-Quellcode:
procedure TMyForm.chBoxClick(Sender: TObject);
var CtrlIntCap: Integer; MyHandler: THandler; begin if Sender is TCheckBox then begin CtrlIntCap := StrToInt(TCheckBox(Sender).Caption); if (CtrlIntCap <= 18) and (CtrlIntCap >= 11) then MyHandler.SetPosition(CtrlIntCap); end; end;
Delphi-Quellcode:
wurde nie erzeugt, dh du greifst auf MyHandler zu welches auf nil zeigt.
MyHandler: THandler;
|
AW: Array of Boolean Problem
Zitat:
|
AW: Array of Boolean Problem
Sagte ich es nicht? :angle:
MyHandler wurde nicht erstellt. [edit] zu langsam :cry: (gab aber sowieso keine RedBox, also nicht meine Schuld :stupid: ) Zitat:
|
AW: Array of Boolean Problem
Zitat:
|
AW: Array of Boolean Problem
Sehe ich auch so.
Delphi-Quellcode:
type
TFormBla = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FMyHandler: THandler; ... procedure TFormBla.FormCreate(Sender: TObject); begin FMyHandler := THandler.Create; end; procedure TFormBla.FormDestroy(Sender: TObject); begin FMyHandler.Free; end; |
AW: Array of Boolean Problem
Ich seh den Wald vor lauter Bäumen nicht. Natürlich habt ihr recht.
Gott ist mir das peinlich :duck: Danke für eure Hilfe! MfG, dnub |
AW: Array of Boolean Problem
Wobei hier eigentlich auch der Compiler hätte gemeckert haben müssen ... so vonwegen "nicht initialisierte Variable" ... muß man nur mal drauf hören :angle2:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:44 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 by Thomas Breitkreuz