![]() |
Unerklärliche Zugriffsverletzung
Hallo,
ich bin gerade am Verzweifeln. Ich erhalte eine Zugriffsverletzung in folgendem Code:
Delphi-Quellcode:
constructor TVisibleTreeNode.Create(theParentBox:TAnchestorClass; theName,theImage:string; theX,theY:longint; theCaption:string);
var imgPtr: ImageType; begin FParentBox := theParentBox; FName := theName; FLeft := theX; FTop := theY; FCaption := theCaption; FOnClick := @Click; imgPtr := LoadImage(theImage); FNodeImage := TVisibleNodeImage.Create(FParentBox,FName,FLeft,FTop,imgPtr.width,imgPtr.height,imgPtr,@ImageClick); inherited Create(FParentBox,FName,FLeft+FNodeImage.Width+6,FTop+7,theCaption); FClicked := false; FExpanded := false; FNode.VisibleClass := self; //AN DIESER STELLE DIE ACCESS VIOLATION end;
Delphi-Quellcode:
Unten die Definition der Klasse und nun noch die Definition des Node:
TVisibleTreeNode = class(TAnchestorClass)
private FParentBox: TAnChestorClass; FLeft, Ftop, FWidth, FHeight: Integer; FName: String; FImage: String; FCaption: String; FClicked: Boolean; FExpanded: Boolean; FOnClick: TClickEvent; FNode: TNode; FNodeImage: TVisibleNodeImage; function GetCaption: String; procedure SetCaption(AValue: String); procedure SetImage(AValue: String); procedure SetLeft(AValue: Integer); procedure SetTop(AValue: Integer); procedure SetWidth(AValue: Integer); procedure SetHeight(AValue: Integer); procedure ImageClick(param: String); public constructor Create(theParentBox:TtuiBox; theName,theImage:string; theX,theY:longint; theCaption:string); procedure Click(Sender: TObject; mX, mY: Integer); property OnClick: TClickEvent read FOnClick write FOnClick; end;
Delphi-Quellcode:
Warum tritt dese Zugriffsverletzung hier auf?
TNode = class(TObject)
private FCompare: TCompareFunc; FCaption: String; FParent: TNode; FNext: TNode; FNumber: Integer; FSubnodes: TNodes; FVisibleClass: TObject; function GetCount: Integer; function GetNodes(Index: Integer): TNode; public constructor Create(aParent: TNode; CompareFunc: TCompareFunc; aCaption: String); destructor Destroy; override; procedure Add(ParentNode: TNode; aNode: TNode); procedure AddSubnode(aParentNode: TNode; aNode: TNode); //Neuen Sub Knoten hinzufügen property Caption: String read FCaption write FCaption; property Nodes[Index: Integer]: TNode read GetNodes; //Die Blätter property Count: Integer read GetCount; //Anzahl Blätter property Parent: TNode read FParent write FParent; property Next: TNode read FNext write FNext; property Number: Integer read FNumber write FNumber; [B]property VisibleClass: TObject read FVisibleClass write FVisibleClass;[/B] end; |
AW: Unerklärliche Zugriffsverletzung
.. wo wird/wurde fNode denn erzeugt?
Grüße Klaus |
AW: Unerklärliche Zugriffsverletzung
Zitat:
und so Zitat:
Renate |
AW: Unerklärliche Zugriffsverletzung
Vor der Zuweisung von Self könnte man ja mal einfach prüfen, ob es FNode schon / überhaupt gibt:
Delphi-Quellcode:
Oder per Haltepunkt und Debugger mal nachschauen, was da los ist.
if Assigned(FNode) then begin
FNode.VisibleClass := self; end else begin MessageDlg('Da hat jemand vergessen FNode zu erstellen.',mtError,[mbCancel],0); end; |
AW: Unerklärliche Zugriffsverletzung
Die Prüfung kann man sich aber auch sparen, da FNode ein privates Feld ist und somit im Konstruktor initial nil ist. Es bleibt also nur, die Instanz vor der Zuweisung zu erzeugen oder eine bereits bestehende als Argument dem Konstruktor hinzuzufügen. Bei Letzterem würde eine entsprechende Prüfung dann auch wieder Sinn machen.
|
AW: Unerklärliche Zugriffsverletzung
Zitat:
|
AW: Unerklärliche Zugriffsverletzung
Zitat:
|
AW: Unerklärliche Zugriffsverletzung
@Delphi.Narium +
Zitat:
|
AW: Unerklärliche Zugriffsverletzung
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 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