AGB  ·  Datenschutz  ·  Impressum  







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

Ungültige Zeigeroperation ???

Ein Thema von thomas2009 · begonnen am 18. Mär 2009 · letzter Beitrag vom 19. Mär 2009
Antwort Antwort
thomas2009
(Gast)

n/a Beiträge
 
#1

Ungültige Zeigeroperation ???

  Alt 18. Mär 2009, 23:17
Hallo,

ich erhalte die fehlermeldung, wenn ich das Programm project1.exe schließe " Ungültige Zeigeroperation"

Das liegt vermutlich an eine Bitmap, die ich beim Schließen free zu machen
Delphi-Quellcode:
//...
bmp1 := TBitmap.Create;
bmp1.PixelFormat := pf24bit;
//...
procedure TForm1.FormDestroy(Sender: TObject);
begin
bmp1.free;
end;
Und wenn ich beim Schließen das Bitmap nicht free mache, dann erscheint die Fehlermeldung nicht

Man muss aber das bmp1 free machen
Miniaturansicht angehängter Grafiken
ung_ltig_zeigeroperation_189.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Ungültige Zeigeroperation ???

  Alt 18. Mär 2009, 23:41
Kann es sein, dass du fälschlicherweise die Bitmap per direkter Zuweisung in ein TImage gelegt hast z.B.?Image1.Picture.Bitmap := bmp1; Das wäre ungünstig, weil dann diese beim Zerstören der Bitmap zu zerstören versucht wird.
Besser lege nur das Bild aus der Bitmap hinein:Image1.Picture(.Bitmap).Assign(bmp1); Das .Bitmap sollte gar nicht nötig sein so.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Ungültige Zeigeroperation ???

  Alt 19. Mär 2009, 01:12
Hi jaenicke,

Weiß das auch noch nicht so lange aber in der Setter-Methode der Picture-Klasse wird das Bitmap schon assigned. Daran kann es also nicht liegen.

Ich schätze thomas2009 muss uns noch ein bisschen mehr Code offenbaren
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.350 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Ungültige Zeigeroperation ???

  Alt 19. Mär 2009, 01:14
Ja, ok, in dem Fall ja, da kann man ja auch nil zuweisen, ich weiß. Aber an anderen Stellen muss das ja nicht so sein. Mir fällt allerdings kein konkretes anderes Beispiel ein.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Ungültige Zeigeroperation ???

  Alt 19. Mär 2009, 08:47
Ich hätte eigentlich erwartet das thomas2009 Quelltext an seinen Beitrag hängt.
Aus den 3 Zeilen kann man unmöglich die Fehlerursache ermitteln und das Bild der Fehlermeldung bringt auch keine zusätzlichen Informationen.
Meine Glaskugel vermutet eine dieser Varianten:

Das Objekt aus bmp1 wurde einer anderen Variablen zugewiesen und dort freigegeben.
bmp1 := TBitmap.Create;
bmp2 := bmp1; <- eventuell Speicherloch wenn bmp2 bereits auf ein Objekt verweist
bmp2.Free;
bmp1.Free; <- zeigt auf ein Object das es nicht mehr gibt "Ungültige Zeigeroperation"

Der Variablen bmp1 wurde nachträglich ein anderes Objekt zugewiesen, das aber an anderer Stelle freigegeben wird.
bmp1 := TBitmap.Create;
bmp1 := bmp2; <- Speicherloch, das bereits erzeugte Objekt für bmp1 wird nicht freigegeben
bmp2.Free;
bmp1.Free; <- zeigt auf ein Object das es nicht mehr gibt "Ungültige Zeigeroperation"

Für die Variable bmp1 wird mehr als einmal Free aufgerufen.
bmp1 := TBitmap.Create;
bmp1.Free;
bmp1.Free; <- zeigt auf ein Object das es nicht mehr gibt "Ungültige Zeigeroperation"
  Mit Zitat antworten Zitat
thomas2009
(Gast)

n/a Beiträge
 
#6

Re: Ungültige Zeigeroperation ???

  Alt 19. Mär 2009, 11:05
Zitat von Blup:
...

Für die Variable bmp1 wird mehr als einmal Free aufgerufen.
bmp1 := TBitmap.Create;
bmp1.Free;
bmp1.Free; <- zeigt auf ein Object das es nicht mehr gibt "Ungültige Zeigeroperation"
das lag daran vermutlich
Nun habe ich den Code so geändert:
Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
begin
if bmp1=nil then bmp1.free;
end;
Nun erscheint Keine Fehlermeldung beim Schließen der Anwendung
Ich hoffe das ist die Lösung
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Ungültige Zeigeroperation ???

  Alt 19. Mär 2009, 11:06
"Wenn es nicht da ist, dann gib es frei" . Ich glaube kaum, dass Du das so gemeint hast.

[edit] Um noch einen Tipp loszuwerden: stattbmp1.Free; besserFreeAndNil(bmp1); verwenden, dann sollte es beim finalen Free keinen Fehler mehr geben, da Free prüft, ob das Objekt nil ist. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Ungültige Zeigeroperation ???

  Alt 19. Mär 2009, 16:00
if bmp1=nil then bmp1.free;

Das ist Unsinn. Wenn bmp1 = nil ist, dann darf man durchaus Free aufrufen, es tut nur nichts.
bmp1.Free ohne Bedingung direkt aufzurufen ist also durchaus richtig.

bmp1.free löscht das Objekt, setzt aber die Variable bmp1 nicht auf nil.
bmp1 verweist danach auf einen ungültigen Speicherbereich.
Wird bmp1.free danach ein weiteres mal aufgerufen, erscheint deshalb die Fehlermeldung.

Man kann statt dessen FreeAndNil(bmp1) verwenden.
Dadurch wird sowohl das Objekt als auch die Variable gelöscht, das entspricht:
bmp1.Free;
bmp1 := nil;

Danach ist der erneute Aufruf von bmp1.Free immer zulässig, es gibt aber nichts freizugeben.
  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 07:16 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