![]() |
Constructor stürzt mich ins Verderben
Hallo zusammen,
ich bin grad am Verzweifeln. Ich habe mehrere Objektlisten und packe da immer kräftig meine Ojekte drauf. Unit Typen:
Delphi-Quellcode:
Soweit so gut. Funktioniert auch alles ganz prima. Ich deklariere die Tabus (Tabu : TTabu;), lege einige an (Tabu := TTabu.Create), weise ihnen Werte zu (Tabu.t := 7) und packe sie in die Liste (Tabu_liste.add(Tabu)).
Type TTabu = class(TObject)
t:integer; s:integer; ... Constructor Create; end; Type TTabu_Liste = class(TOjectList) published function GetItems(i:integer):TTabu end; ... implementation constructor TTabu.Create(); begin inherited create; end; function TTabu_Liste.GetItems(i : integer):TTabu; begin result := TTabu(inherited Items[i]); end; Irgendwann allerdings schmiert das Programm beim Aufruf des Constructors ab. Also nach
Delphi-Quellcode:
springt er noch in den Constructor und hängt sich dann auf. Nach ein paar Sekunden kommt dann eine Fehlermeldung 'Zugriffsverletzung bei ...: Schreiben von Adresse ...'.
Tabu := TTabu.Create
Das Schlimme ist, dass es irgendwie willkürlich passiert. Wenn ich bspw. beim Typen noch eine variable k: single mit reinstecke, hängt sich das Programme einige Schleifen früher auf. Wenn ich die Objekte nach der Übernahme in die Liste zerstöre, dann hat das nur den Effekt, dass das Programm bei einem anderen Constructor abschmiert. Hab echt keinen Plan, was da schief läuft und wäre Euch dankbar für Tipps. Kann ich im Constructor etwas ändern? Eines jedoch vorweg: dynamische Arrays von records sind nicht drin. Damit hatte ich ursprünglich alles gemacht, jedoch war der Speicherbedarf ein wenig zu hoch geworden (wegen ständiger Längenanpassung). Falls wichtig: ich nutze Delphi 7. |
Re: Constructor stürzt mich ins Verderben
was soll das
Delphi-Quellcode:
? :shock: Und das inherited mit dem Item ? Den TObject-Constructor gibt es zwar, der ist aber leer. Wenn dieser leere Constructor aufgerufen werden soll, dann wenigstens nur mit
inherited create;
Delphi-Quellcode:
Man kanns in dem Fall aber auch sein lassen. :mrgreen: Ich lasse es trotzdem allerdings nicht sein, weil die theoretische Möglichkeit besteht, dass zwischen meinem TXYObject und dem Original-TObject noch eine Zwischenschicht reinkommt. Wegen dieser müsste dann nachträglich wohl doch noch inherited; reingeschrieben werden. Allerdings nur das und nicht noch create dahinter. Das ist jedenfalls der einzige Unterschied, den ich an dieser Stelle zu meinem funktionierendem Source sehe. 8)
inherited;
P.S.: sehe, da steht ja sogar
Delphi-Quellcode:
Wozu die () ? Befürchte, dass Delphi sogar dadurch aufs Glatteis gejagt wird. :gruebel:
constructor TTabu.Create();
|
Re: Constructor stürzt mich ins Verderben
Hm, scheint erst mal alles richtig zu sein. Kannst Du das 'irgendwann' näher definieren (in Anzahl der TTabu Instanzen, die Du erzeugt hast)? Bzw. kannst Du den Code posten, indem Du die Elemente erzeugst und einhängst?
Wegen den Speichergeschichten: Binde FastMM ein. Grüße, Uli |
Re: Constructor stürzt mich ins Verderben
Zitat:
Zitat:
Was das inherited in GetItems soll, ist mir allerdings nicht klar, denn schließlich gibt es ja kein Items in der neuen Klasse, so dass das ohnehin klar ist, was gemeint ist. Ich sehe in den geposteten Schnipseln aber erstmal keinen echten Fehler. Die beschriebenen Effekte deuten jedenfalls auf ein Speicherproblem. Überschriebener Speicher z.B., aber das liegt nicht an dem geposteten Code. Dass es Fehler gibt, wenn du die erstellten Objekte nach dem Hinzufügen freigibst, ist klar, denn dann sind die ja in der Liste auch kaputt. Vielleicht hilft es, wenn du versuchst den entsprechenden Code isoliert zu testen bzw. zu kürzen. Wenn das nicht mehr viel Code wäre, in dem dann immer noch der Fehler auftritt, könntest du den dann komplett posten. |
Re: Constructor stürzt mich ins Verderben
Delphi-Quellcode:
Constructor Create; virtual; override;
|
Re: Constructor stürzt mich ins Verderben
Zitat:
|
Re: Constructor stürzt mich ins Verderben
Zitat:
|
Re: Constructor stürzt mich ins Verderben
Guten Morgen,
schon einmal vielen Dank für die Antworten! @Hansa: habs irgendwann einmal so gelernt und niemals hinterfragt. Aber gut zu wissen, dass ich mir die Tipperei sparen kann. Hab den überflüssigen Kram rausgeschmissen, aber das hat mein Problem noch nicht gelöst. @Ulik: Irgendwann klingt fast nach viel, ist es aber nicht. Ich führe 5 Listen und wenn es zum Abbruch kommt, habe ich im Schnitt jeweils rund 20-30 Elemente drin. Aber kurz zu FastMM - war das eine Idee für die dynamischen Arrays? @jaenicke: Momentan ist der Code noch etwas zu umfangreich, um ihn zu posten, aber ich probiere mal, Deinen Rat mit dem Isolieren umzusetzen, und melde mich im Laufe des Tages! @mkinzler: ähm, vielleicht stelle ich mich jetzt zu doof an, aber wo muss ich denn 'override' und 'virtual' schreiben?! Ncoh einmal vielen Dank an alle! |
Re: Constructor stürzt mich ins Verderben
Zitat:
|
Re: Constructor stürzt mich ins Verderben
Zitat:
Zum eigentlichen Problem: bei den paar Instanzen sollte da eigentlich nichts anbrennen. Versuch mal den Code zu extrahieren, mit dem Du die Instanzen erzeugst und einhängst. Vieleicht sieht man hier was. Grüße, Uli |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 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 by Thomas Breitkreuz