AGB  ·  Datenschutz  ·  Impressum  







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

Probleme mit Tlist bei Prozeduren

Ein Thema von smyle2000 · begonnen am 23. Feb 2007 · letzter Beitrag vom 23. Feb 2007
Antwort Antwort
smyle2000

Registriert seit: 15. Feb 2005
3 Beiträge
 
#1

Probleme mit Tlist bei Prozeduren

  Alt 23. Feb 2007, 14:16
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.
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider
Online

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Probleme mit Tlist bei Prozeduren

  Alt 23. Feb 2007, 14:24
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
Frank Reim
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Probleme mit Tlist bei Prozeduren

  Alt 23. Feb 2007, 14:29
Deklariere die Prozedur lieber
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?
Markus Kinzler
  Mit Zitat antworten Zitat
smyle2000

Registriert seit: 15. Feb 2005
3 Beiträge
 
#4

Re: Probleme mit Tlist bei Prozeduren

  Alt 23. Feb 2007, 14:40
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;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Probleme mit Tlist bei Prozeduren

  Alt 23. Feb 2007, 14:44
for i:=0 to m-1 do //m=Anzahl der Teile Ich würde nicht auf dem Original-Canvas von bild arbeiten.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider
Online

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Probleme mit Tlist bei Prozeduren

  Alt 23. Feb 2007, 14:52
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
Frank Reim
  Mit Zitat antworten Zitat
smyle2000

Registriert seit: 15. Feb 2005
3 Beiträge
 
#7

Re: Probleme mit Tlist bei Prozeduren

  Alt 23. Feb 2007, 15:11
Die Anregung von mkinzler hat mich auf einen Fehler aufmerksam gemacht. Jetzt ist das Problem behoben.
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
  Mit Zitat antworten Zitat
23. Feb 2007, 15:35
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Hier gings um Delphi...
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Probleme mit Tlist bei Prozeduren

  Alt 23. Feb 2007, 15:43
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:44 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