Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Probleme mit Tlist bei Prozeduren (https://www.delphipraxis.net/87117-probleme-mit-tlist-bei-prozeduren.html)

smyle2000 23. Feb 2007 14:16


Probleme mit Tlist bei Prozeduren
 
Hallo erstmal.

Ich habe eine Prozedur geschrieben das ein Bild in mehrere Bereiche aufteilen soll und anschließend die Teile an das Hauptprogramm zurückgibt. Der Funktionskopf hat folgende Form:
Code:
procedure Split_Img(bild:TImage;var liste:TObjectlist);
Aber ich erhalte immer nach der Beendigung der Prozedur einen Invalid Pointer Error. Ich weiß nicht warum das nicht funktioniert und hoffe jemand kann mir helfen.

dataspider 23. Feb 2007 14:24

Re: Probleme mit Tlist bei Prozeduren
 
Hi,

auch, wenn das var überflüssig ist, da Objekte immer per Referenz übergeben werden, ist aus deinem Code der Fehler nicht ersichtlich.
Ich gehe mal davon aus, dass eines deiner Objekte nil ist.
Aber dafür müsstes du etwas mehr Code liefern.

Cu, Frank

mkinzler 23. Feb 2007 14:29

Re: Probleme mit Tlist bei Prozeduren
 
Deklariere die Prozedur lieber
Delphi-Quellcode:
procedure Split_Img(const bild:TImage;var liste:TObjectlist);
das Sichergestllet ist, das die Referenz (der Zeiger) nicht verbogen wird.
Was machst du mit bild innerhalb der Prozedur?

smyle2000 23. Feb 2007 14:40

Re: Probleme mit Tlist bei Prozeduren
 
Also dies sind die Codezeilen, an denen se liegen kann.
Code:
procedure Split_Img(bild:TImage;var liste:TObjectlist);
var seg:TSegment;
  i,j,m:integer;
begin
   ...
 
  for i:=0 to m do //m=Anzahl der Teile
  begin
    seg:=TSegment.Create;
    seg.x:=bild.Width;
    seg.y:=bild.Height;
    seg.bild:=TBitmap.Create;
    seg.bild.Height:=seg.y; //Setzen der Größe
    seg.bild.Width:=seg.x;
    liste.Add(seg);
  end;

  for i:=1 to m-1 do
  with (liste[i] as TSegment) do
  begin
    bild.Canvas.CopyRect(r1,bild.Canvas,r2);
    sizex:=sizex-x;
    sizey:=sizey-y;
  end;


end;

mkinzler 23. Feb 2007 14:44

Re: Probleme mit Tlist bei Prozeduren
 
Delphi-Quellcode:
for i:=0 to m-1 do //m=Anzahl der Teile
Ich würde nicht auf dem Original-Canvas von bild arbeiten.

dataspider 23. Feb 2007 14:52

Re: Probleme mit Tlist bei Prozeduren
 
Hi,

interessant wäre noch die Klasse TSegment.
Ich würde z.B. die Bitmap im Constructor von TSegment erzeugen und im Destructor wieder freigeben.

Delphi-Quellcode:
// warum?
seg.bild:=TBitmap.Create;
So, wie du es jetzt machst, solltest du in TSegment im Destructor Bild auf nil prüfen und die Bitmap freigeben.
Aber wie gesagt, eigentlich erzeugt man zur Klasse gehörige Objekte nicht ohne driftigen Grund von aussen.

An welcher Stelle (Debugger benutzen) kommt denn der Fehler?

Frank

smyle2000 23. Feb 2007 15:11

Re: Probleme mit Tlist bei Prozeduren
 
Die Anregung von mkinzler hat mich auf einen Fehler aufmerksam gemacht. Jetzt ist das Problem behoben. :-D
Der Fehler lag in einer Prozedur die in dieser aufgerufen wird. Dort lese ich über die Grenzen des Feldes hinaus. Komischerweise erhalte ich die Fehlermeldung aber erst, sobald die äußere Prozedur abgearbeitet wurde.

Auf jeden Fall danke für Eure Bemühungen
:thumb:

DP-Maintenance 23. Feb 2007 15:35

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Hier gings um Delphi...

Muetze1 23. Feb 2007 15:43

Re: Probleme mit Tlist bei Prozeduren
 
Schalte in deinen Projektoptionen -> Compiler die Bereichsprüfung mit ein und erstell das Projekt neu. Damit wird das Projekt zwar ein wenig langsamer (für eine endültige Version wieder deaktivieren), aber du wirst halt sofort bei einem falschen Zugriff über solche Grenzen hinweg benachrichtigt.


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