Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Access Violation bei zweidimensionalem array of TBitmap (https://www.delphipraxis.net/90570-access-violation-bei-zweidimensionalem-array-tbitmap.html)

Chaosente 19. Apr 2007 16:40


Access Violation bei zweidimensionalem array of TBitmap
 
Also hier mal mein Problem, ich kriege folgenden fehler:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 00453935 in Modul 'Project1.exe'. Lesen von Adresse 00000000' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------


das ganze in dieser zeile:
Delphi-Quellcode:
    FObjects[i,i].Width:=j;
Hier noch mal der ganze code zum besseren verständnis...

Delphi-Quellcode:
unit KKSpielfeld;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, KKObjects, Math;

type
  TKKSpielfeld = class(TImage)
  private
  FObjects: array of array of TBitmap;
  public
  constructor Create(size:integer; AOwner: TComponent);
  end;

implementation

constructor TKKSpielfeld.Create(size:integer; AOwner: TComponent);
var
  i,j,count:integer;
begin
  count:=0;
  size:=(size*2+1);
  SetLength(FObjects,size,size);
  for i:=0 to size do
  begin
    j:=(trunc(power(-1,i))+2)*10;
    FObjects[i,i].Width:=j;
    FObjects[i,i].Height:=j;
    count:=count+j;
  end;
  self.Parent:=TWinControl(AOwner);
  self.width:=count;
  self.height:=count;
end;

end.

Hoffe jemand weis was damit anzufangen ich verstehe es nämlchi grad nciht so sehr...

Bernhard Geyer 19. Apr 2007 16:46

Re: Access Violation bei zweidimensionalem array of TBitmap
 
Und wo werden deine TBitmaps erzeugt auf welche das FObjects-Array zeigen soll?

Chaosente 19. Apr 2007 16:48

Re: Access Violation bei zweidimensionalem array of TBitmap
 
hui, das mir aber peinlich....

leider kriege ich es grad nciht hin... ich hab es so probiert, aber das gibt den selben fehler in der create zeile vermutlich wieder son anfänger ding...

hier mein code:
Delphi-Quellcode:
constructor TKKSpielfeld.Create(size:integer; AOwner: TComponent);
var
  i,j,count:integer;
begin
  count:=0;
  size:=(size*2+1);
  SetLength(FObjects,size,size);
  for i:=0 to size do
  begin
    j:=(trunc(power(-1,i))+2)*10;
    FObjects[i,i]:=TBitmap.Create;
    FObjects[i,i].Width:=j;
    FObjects[i,i].Height:=j;
    count:=count+j;
  end;
  self.Parent:=TWinControl(AOwner);
  self.width:=count;
  self.height:=count;
end;

Hawkeye219 19. Apr 2007 17:09

Re: Access Violation bei zweidimensionalem array of TBitmap
 
Hallo,

deine Schleife läuft zu weit:

Delphi-Quellcode:
// for i:=0 to size do
for i := 0 to size - 1 do
Gruß Hawkeye

Chaosente 19. Apr 2007 17:12

Re: Access Violation bei zweidimensionalem array of TBitmap
 
Nette idee liegt aber nicht daran,denn ich kriege den fehler dierekt beim ersten durchlauf und zweitens hab ichs grad getestet, ändert nichts...

Hawkeye219 19. Apr 2007 18:00

Re: Access Violation bei zweidimensionalem array of TBitmap
 
Zitat:

Zitat von Chaosente
Nette idee liegt aber nicht daran,denn ich kriege den fehler dierekt beim ersten durchlauf und zweitens hab ichs grad getestet, ändert nichts...

Es ändert schon was, ohne die Korrektur wirst du weiterhin Zugriffsfehler erhalten. Aber es war nicht der einzige Fehler:

Delphi-Quellcode:
constructor TKKSpielfeld.Create(size:integer; AOwner: TComponent);
var
  i,j,count:integer;
begin
  inherited Create (AOwner); // das fehlte!
  count:=0;
Gruß Hawkeye

Chaosente 19. Apr 2007 19:49

Re: Access Violation bei zweidimensionalem array of TBitmap
 
kann mir jetzt auch ncoh jemand erklären was das ganze bewirkt??? Ich benutze ungern Code den ich nicht verstehe...

Muetze1 20. Apr 2007 08:58

Re: Access Violation bei zweidimensionalem array of TBitmap
 
Du hast eine Klasse von TImage abgeleitet. Da du dem Constructor in deiner Ableitung neue Parameter gegeben hast und auch nicht den TImage Konstruktor überschrieben hast, wird dieser versteckt. Dadurch musst du nun dafür sorgen, dass du den Originalen Konstruktor aufrufst von TImage, damit dieses sich auch ordentlich anlegen kann. (Wofür ein Constructor gebraucht wird, ist hoffentlich klar).

Auch müsstest du zur Zeit einen Hinweis vom Compiler erhalten, dass dein Constructor den virtuellen Constructor von TImage verdeckt, oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 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