AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array of Boolean Problem

Ein Thema von delphinub23 · begonnen am 22. Aug 2011 · letzter Beitrag vom 22. Aug 2011
Antwort Antwort
Seite 1 von 2  1 2      
delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#1

Array of Boolean Problem

  Alt 22. Aug 2011, 13:01
Delphi-Version: 2010
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
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Array of Boolean Problem

  Alt 22. Aug 2011, 13:06
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:

FMyBoolArray[AIndex] := AValue; Es sei denn du willst den Wert in dem Array NICHT auf false setzen, wenn AValue false ist.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Array of Boolean Problem

  Alt 22. Aug 2011, 13:08
Ich prüfe ob der Index sich zwischen den Arraygrenzen befindet - laut Debugger alles io, dennoch AV.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

AW: Array of Boolean Problem

  Alt 22. Aug 2011, 13:09
Zeig doch mal etwas mehr Code.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Array of Boolean Problem

  Alt 22. Aug 2011, 13:15
Ist die Instanz von THandler überhaupt "ordentlich" erstellt worden?

Und schalte mal in den Projektoptionen die Bereichsprüfung an.
$2B or not $2B
  Mit Zitat antworten Zitat
delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#6

AW: Array of Boolean Problem

  Alt 22. Aug 2011, 13:16
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ö.
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Array of Boolean Problem

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

Geändert von mleyen (22. Aug 2011 um 13:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

AW: Array of Boolean Problem

  Alt 22. Aug 2011, 13:18
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?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Array of Boolean Problem

  Alt 22. Aug 2011, 13:19
Sagte ich es nicht?

MyHandler wurde nicht erstellt.

[edit]
zu langsam (gab aber sowieso keine RedBox, also nicht meine Schuld )


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.
$2B or not $2B

Geändert von himitsu (22. Aug 2011 um 13:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Array of Boolean Problem

  Alt 22. Aug 2011, 13:19
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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 Uhr.
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