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 Array of Boolean Problem (https://www.delphipraxis.net/162413-array-boolean-problem.html)

delphinub23 22. Aug 2011 12:01

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

Neutral General 22. Aug 2011 12:06

AW: Array of Boolean Problem
 
Hallo,

Also du musst halt sicherstellen, dass AIndex zwischen 11 und 18 liegt.

Du kannst
Delphi-Quellcode:
if AValue then
 FMyBoolArray[AIndex] := TRUE;
aber wahrscheinlich vereinfachen:

Delphi-Quellcode:
FMyBoolArray[AIndex] := AValue;
Es sei denn du willst den Wert in dem Array NICHT auf false setzen, wenn AValue false ist.

delphinub23 22. Aug 2011 12:08

AW: Array of Boolean Problem
 
Ich prüfe ob der Index sich zwischen den Arraygrenzen befindet - laut Debugger alles io, dennoch AV.

DeddyH 22. Aug 2011 12:09

AW: Array of Boolean Problem
 
Zeig doch mal etwas mehr Code.

himitsu 22. Aug 2011 12:15

AW: Array of Boolean Problem
 
Ist die Instanz von THandler überhaupt "ordentlich" erstellt worden?

Und schalte mal in den Projektoptionen die Bereichsprüfung an.

delphinub23 22. Aug 2011 12:16

AW: Array of Boolean Problem
 
Deklaration:
Delphi-Quellcode:
type
  TMyBoolArray = array[11..18] of Boolean;

type
  THandler = class(TObject)
  private
    FMyBoolArray: TMyBoolArray;
  public
    procedure SetPosition(const APos: Integer);
  end;
Hier kommt die AV:
Delphi-Quellcode:
procedure THandler.SetPosition(const APos: Integer);
begin
  if (APos>= 11) and (APos<= 18) then
    FMyBoolArray[APos] := TRUE;
end;
Aufruf:
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:

Ist die Instanz von THandler überhaupt "ordentlich" erstellt worden?
ähhmm...nö.

mleyen 22. Aug 2011 12:16

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:
MyHandler: THandler;
wurde nie erzeugt, dh du greifst auf MyHandler zu welches auf nil zeigt.

DeddyH 22. Aug 2011 12:18

AW: Array of Boolean Problem
 
Zitat:

Delphi-Quellcode:
procedure TMyForm.chBoxClick(Sender: TObject);
var
  CtrlIntCap: Integer;
  MyHandler: THandler; //wo wird der instanziert?
begin
  if Sender is TCheckBox then
  begin
    CtrlIntCap := StrToInt(TCheckBox(Sender).Caption);

    if (CtrlIntCap <= 18) and (CtrlIntCap >= 11) then
      MyHandler.SetPosition(CtrlIntCap);
  end;
end;

Da fehlt ja wohl ein Konstruktor-Aufruf von MyHandler, oder?

himitsu 22. Aug 2011 12:19

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:

Wurde nie erzeugt, dh MyHandler zeigt auf nil.
Lokale Variable ... die Chance, daß die zufällig auf NIL zeigt, steht bei 1:4.294.967.296, da diese garnicht erst initialisiert werden und zufallswerte enthalten.

Neutral General 22. Aug 2011 12:19

AW: Array of Boolean Problem
 
Zitat:

Zitat von DeddyH (Beitrag 1118580)
Zitat:

Delphi-Quellcode:
procedure TMyForm.chBoxClick(Sender: TObject);
var
  CtrlIntCap: Integer;
  MyHandler: THandler; //wo wird der instanziert?
begin
  if Sender is TCheckBox then
  begin
    CtrlIntCap := StrToInt(TCheckBox(Sender).Caption);

    if (CtrlIntCap <= 18) and (CtrlIntCap >= 11) then
      MyHandler.SetPosition(CtrlIntCap);
  end;
end;

Da fehlt ja wohl ein Konstruktor-Aufruf von MyHandler, oder?

.. und ich schätze mal, dass sowohl die Variable als auch der constructor/destructor-Aufruf in das Formular gehören. Sonst macht der Code nämlich keinen Sinn.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:34 Uhr.
Seite 1 von 2  1 2      

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