| Autor |
Beitrag |
walter_b
      
Beiträge: 135
Windows Vista/XP
Delphi 6
|
Verfasst: So 27.07.08 12:38
Ich habe mal wieder so ein richtiges Noob-Problem, allerdings habe ich einmal mehr keine Ahnung, woran es liegen könnte.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| function Hanspeter(): Integer; var hans: Array[0..7] of Byte; prev: Word; I, Y: Byte; begin try for x:=0 to 7 do hans[Y]:=0;
for I:=0 to 7 do begin prev:=I*2; end; Result:=prev; finally Free; end; end; |
Er meldet mir "Undeclared Identifier: Free". Ich versteh das nicht, in der Funktion davor hat es so auch funktioniert. Kann mir jemand helfen?
Edit: Ja, ich weiss, dass der Code unsinnig ist...
Zuletzt bearbeitet von walter_b am So 27.07.08 12:39, insgesamt 1-mal bearbeitet
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 27.07.08 12:39
ganz einfach, du hast kein objekt auf welches free angewendet werden kann.
normal heists Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| obj := tObject.create; try .... finally obj.free; end; |
Zuletzt bearbeitet von Grenzgaenger am So 27.07.08 12:40, insgesamt 1-mal bearbeitet
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 27.07.08 12:40
Die Funktion davor war dann wohl eine Methode.
_________________ Markus Kinzler.
|
|
walter_b 
      
Beiträge: 135
Windows Vista/XP
Delphi 6
|
Verfasst: So 27.07.08 12:41
Ach so, vielen Dank. Aber etwas verwundert mich. Bei der andere Funktion mit Free kommt nach einer gewissen Anzahl Aufrufen trotzdem: Raise out of memory. Woran liegt das? Immerhin benutze ich ja Free!?
Zuletzt bearbeitet von walter_b am So 27.07.08 12:42, insgesamt 1-mal bearbeitet
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 27.07.08 12:42
mkinzler hat folgendes geschrieben: | | Die Funktion davor war dann wohl eine Methode. |
auch bei einer methode, wäre das hier unsinnig. da ein objekt sich nicht selbst freigeben kann...
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 27.07.08 12:42
| Zitat: | | In diesem Falle habe ich hier ein Objekt, welches zerstört wird? |
Ja. Ein tempräres Objekt das du mit TCipher_1DES.Create erzeugt hast
_________________ Markus Kinzler.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 27.07.08 12:43
|
|
walter_b 
      
Beiträge: 135
Windows Vista/XP
Delphi 6
|
Verfasst: So 27.07.08 12:44
Und warum kommt nach einer gewissen Anzahl Aufrufe trotzdem Raise out of memory, auch wenn ich es jedes mal wieder mit Free zerstöre?
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 27.07.08 12:46
weil du wohl noch irgendwo andere objekte hast, welche du zwar erstellst und den speicher hierfür reservierst, diesen aber nicht mehr freigibst.
|
|
walter_b 
      
Beiträge: 135
Windows Vista/XP
Delphi 6
|
Verfasst: So 27.07.08 13:01
Und dieses Objekt muss immer mit .Create aufgerufen werden?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 27.07.08 13:04
Das ist der Konstruktor, welcher eine neue Instanz erzeugt.
_________________ Markus Kinzler.
|
|
walter_b 
      
Beiträge: 135
Windows Vista/XP
Delphi 6
|
Verfasst: So 27.07.08 13:08
mkinzler hat folgendes geschrieben: | | Das ist der Konstruktor, welcher eine neue Instanz erzeugt. |
Hm... Ich verstehe das nicht. Jetzt läuft mir die Datenbank plötzlich wegen eines Out of Memory nicht mehr, weil ich jetzt die Funktion öfters aufrufe. Habe sonst nirgends irgendwo noch einen Constructor gefunden.
Die Fehlermeldung steht immer bei der Funktion von ReallocMem(). Könnte diese Funktion etwas damit zu tun haben?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: So 27.07.08 13:31
Mit dieser Funktion wird Speicher reserviert
_________________ Markus Kinzler.
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: So 27.07.08 14:24
mkinzler hat folgendes geschrieben: | | Mit dieser Funktion wird Speicher reserviert |
Den man nachher natürlich auch wieder freigeben muss!
|
|