![]() |
Zugriffsverletzung bei Constructor.Create
Hey, ich wollte mich mal ein bisschen mit Klassen usw. beschäftigen, und hier ist gleich das ertste Problem: Ich habe hier zwei Klassen:
Delphi-Quellcode:
Das zweite ist ein Feld und hat die Eigenschaft Pixels, ein zweidimensionales Array of TPixels, jedes TPixel hat die Werte R, G und B. So weit, so gut.
type
TPixels = class R, G, B : Byte; public constructor Create; end; type TPixelField = class Pixels : Array of Array of TPixels; public constructor Create(Width, Height : Integer); end; Jetzt erstelle ich das Pixelfield:
Delphi-Quellcode:
Auch das klappt ohne Probleme. Jetzt will ich aber auch die TPixels erstellen:
constructor TPixelField.Create(Width, Height : Integer);
Var i : Integer; begin SetLength(Pixels, Width); for i := low(Pixels) to high(Pixels) do SetLength(Pixels[i], Height); end;
Delphi-Quellcode:
Aber da gibts ne Zugriffsverletzung (EAccesViolation). Genauer gesagt kommt die im Create von TPixels in der ersten Zeile. Aber auch wenn ich TPixels.Create leer lasse, kommt die Zugriffsverletzung. Was mache ich falsch?
Constructor TPixels.Create;
begin R:=0;//<-- Hir kommt die Zugriffsverletzung, auch wenn hier nichts steht G:=0; B:=0; end; //// procedure TForm1.Button2Click(Sender: TObject); var i, j : Integer; Field : TPixelfield; begin Field:=TPixelField.Create(10,10); with Field do begin for i:=low(Pixels) to high(Pixels) do for j:=low(Pixels[i]) to high(Pixels[i]) do begin Pixels[i,j].Create; end; end; end; Mfg |
Re: Zugriffsverletzung bei Constructor.Create
Du rufst den Constructor falsch auf. Das muss folgendermaßen lauten:
Delphi-Quellcode:
Beim Field hast du es richtig gemacht.
Pixel[i, j] := TPixel.Create;
|
Re: Zugriffsverletzung bei Constructor.Create
Delphi-Quellcode:
[edit] Da war jemand schneller :? [/edit]
for i:=low(Pixels) to high(Pixels) do
for j:=low(Pixels[i]) to high(Pixels[i]) do begin Pixels[i,j] := TPixels.Create; //so muss das sein end; end; |
Re: Zugriffsverletzung bei Constructor.Create
Stimmt :oops: Danke :thumb:
Mfg |
Re: Zugriffsverletzung bei Constructor.Create
Das hier:
Delphi-Quellcode:
könnte man doch noch so abkürzen:
constructor TPixelField.Create(Width, Height : Integer);
Var i : Integer; begin SetLength(Pixels, Width); for i := low(Pixels) to high(Pixels) do SetLength(Pixels[i], Height); end;
Delphi-Quellcode:
constructor TPixelField.Create(Width, Height : Integer);
begin SetLength(Pixels, Width, Height); end; |
Re: Zugriffsverletzung bei Constructor.Create
Danke, wusste garnicht, dass man das so machen kann :?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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