Autor Beitrag
Spaceguide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Fr 11.03.05 11:50 
Folgendes:

Ich habe eine Klasse von TImage abgeleitet und erzeuge eine Instanz in FormCreate eines Fensters, übergebe dabei das Form als Owner. Zerstöre ich die Instanz in FormDestroy mit Free und setzte die Referenz auf NIL, so gibt es trotzdem eine Access Violation wenn sich das Form freigibt. Ich denke mir, dass das Form durch seine Components/Controls-Listen geht und alles freigibt was noch da ist. Eigentlich sollte sich die Instanz meiner Klasse aber dort beim Free abmelden, der Destruktor der jeweiligen Superklassen wird aufgerufen (inherited Destroy).

Ist kein wirkliches Problem. Lasse ich das manuelle Free/NIL in FormDestroy weg, habe ich kein Memory-Leak. Mich würde nur interessieren, wo der Fehler liegt.
Harry Hunt
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 50



BeitragVerfasst: Fr 11.03.05 11:56 
Wenn du als owner nicht dein Formular sondern 'nil' übergibst, hast du das Problem möglicherweise nicht.

Hast du den Destuktor deiner Komponente überschrieben? Wenn ja, musst du natürlich den vererbten Destruktor über "inherited" aufrufen, das kann u.U. auch ne Access Violation geben.
wdbee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 628
Erhaltene Danke: 1



BeitragVerfasst: Fr 11.03.05 12:11 
Die Fehler treten dann auf, wenn mehr als einer ein Objekt freigeben wollen!
Das Prinzip ist: Der Owner gibt das Objekt frei. Wenn du das Form als Owner einträgst, gibt das Form das Objekt frei, wenn es selbst freigegeben wird. Wenn du keinen Owner einträgst (nil), dann musst/kannst du dich selbst drum kümmern.
Dabei meine ich mit musst, dass du es auf jeden Fall tun musst, weil sonst ein Speicherleck entstehen würde, mit kannst meine ich, dass du dann die Kontrolle über den Zeitpunkt hast, wann das passieren soll.
Spaceguide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Fr 11.03.05 12:30 
Hae? Wenn ich es manuell freigebe dann hat der Owner das gefälligst nicht mehr zu versuchen.
Spaceguide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Fr 11.03.05 12:42 
ComponentCount des Owners wird auch erwartungsgemäß dekrementiert, wenn ich das Objekt manuell freigebe. Es wird also auf keinen Fall versucht das Objekt zweimal freizugeben.
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Fr 11.03.05 13:04 
user profile iconSpaceguide hat folgendes geschrieben:
Es wird also auf keinen Fall versucht das Objekt zweimal freizugeben.
Damit wäre der Verdachtsmoment dann ja geklärt und der Owner will - entgegen dem Titel dieses Threads - nicht freigeben. :wink:
Und nun?
Spaceguide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Fr 11.03.05 14:24 
Aha, gebe ich nach Freigeben des Objektes den Owner auch manuell frei gibt es keine Exception. Echt verwirrend!
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Fr 11.03.05 14:47 
Wenn das noch verfolgt werden soll, dann wäre es jetzt vielleicht Zeit für etwas Code ...?