![]() |
Speicherreservierungsfehler ?
Hi,
ich programmiere gerade ein Programm welches mit 8MB mehr Speicher als meine anderen Programme benötigt. Es enthält ein Array und ein paar Variablen. Ich bekam plötzlich beim Beenden eine Exception/Zugriffsverletzung. Beim einen Mal wurde aus einem unerklärlichen Grund ein Timer bei Programmende noch einmal aktiv und hat sich sehr seltsam verhalten: Er missachtete alle If-Abfragen in OnTimer. Nun habe ich daher die Timer einfach mal deaktiviert und bekam eine Exception. Danach überlegte ich mir, was ich wirklich zuletzt geändert hatte. Ich habe eine Variable deklariert. Selbst wenn ich keine Hoffnung hatte, habe ich sie kurz auskommentiert und geschaut ob es was ändert. Unglaublicherweise verschwand die Exception. Nach etwas Probiererei hatte ich raus, dass es vollkommen egal ist, wo ich eine neue Variable deklariere, es gibt immer eine Exception beim Beenden des Programms. Ich hatte vor sehr langer Zeit diesen Fehler schonmal. Das ist nun aber schon bestimmt zwei Jahre her und ich wusste auch nicht, wonach ich suchen sollte. Habt ihr eine Idee woran das liegen könnte ? Der Arbeitsfreicher ist bei mir frei genug und selbst wenn er es nicht wäre, gäbe es von daher denke ich grundsätzlich keine Probleme. Ich habe die Vermutung, dass Delphi nicht genügend Speicher reserviert. Kann das sein ? |
Re: Speicherreservierungsfehler ?
Was für ein Typ hat die Variable?
|
Re: Speicherreservierungsfehler ?
Integer. Wenn ich Boolean nehme, gibt es keinen Fehler. Da wird denke ich wirklich was nicht richtig reserviert, aber ich mache das selbst überall ordentlich.
|
Re: Speicherreservierungsfehler ?
du wirst vermutlich irgendwo über den Speicher hinaus schreiben oder auf freigegebene oder nicht instanzierte Objekte zugreifen. Wenn du schreibst "zugriffsverletzung" solltest du auch die Adresse mit erwähnen denn die ist nicht unerheblich. Und das beim Beenden ein Timer noch aktiv ist, ist auch nichts ungewöhnliches da ein Timer so lange aktiv ist bis er disabled wird oder eben frei gegeben. Und wenn du irgendwo Applicaiton.ProcessMessages verwendest werden eben auch beim Beenden noch Timermessages abgearbeitet. Wenn du auf einem bereits frei gegebenen Object rumrödelst kann es auch passieren das da ganz komische Dinge passieren weil plötzlich irgendwo im Code hingesprungen wird wo schon was ganz anderes im speicher steht etc.
Ohne Quelltext und ohne Einsatz des Debuggers ist das ganze ein reines Rätzel raten. |
Re: Speicherreservierungsfehler ?
Habe nach langer Suche den Fehler gefunden, hätte aber wirklich nicht erwartet, dass der eine Exception erst so spät zur Folge hätte. Ein Index bei einer Arraybefüllung war falsch. Danke.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:29 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-2025 by Thomas Breitkreuz