AGB  ·  Datenschutz  ·  Impressum  







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

FreeAndNil() auf Array anwenden?

Ein Thema von Balu der Bär · begonnen am 4. Jan 2007 · letzter Beitrag vom 4. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Balu der Bär
(Gast)

n/a Beiträge
 
#1

FreeAndNil() auf Array anwenden?

  Alt 4. Jan 2007, 17:08
Moin,

ich bin anscheinend etwas verwirrt heute...

Wieso ist es mir möglich ein Array mittels FreeAndNil() zu leeren, oder jedenfalls diesen Befehl auf ein Array anzuwenden? Laut Delphi-Hilfe muss der übergebene Wert eine Instanz einer von TObject abgeleiteten Klasse sein.
Ein Array ist eine Instanz von TObject? Inwieweit das?

Ich kam darauf da ein Bekannter mich fragte wieso bei ihm nach der Anwendung von FreeAndNil() auf ein Array manchmal sporadisch Fehlermeldungen auftraten. Was macht als FreeAndNil() mit dem Array, einfach nur dessen Inhalt löschen?

*confused*
  Mit Zitat antworten Zitat
Benutzerbild von St.Pauli
St.Pauli

Registriert seit: 26. Dez 2004
351 Beiträge
 
Delphi 7 Personal
 
#2

Re: FreeAndNil() auf Array anwenden?

  Alt 4. Jan 2007, 17:31
Also bei mir klappt es nicht FreeAndNil() auf ein Array anzuwenden.
Hat er dich gefragt, warum manchmal Fehler auftreten, oder warum immer Fehler auftreten? Weil ein manchmal würde mich stark verwundern...
Gruß St.Pauli
  Mit Zitat antworten Zitat
Balu der Bär
(Gast)

n/a Beiträge
 
#3

Re: FreeAndNil() auf Array anwenden?

  Alt 4. Jan 2007, 17:33
Ja, es treten manchmal (sporadisch) Fehler auf (Zugriffsverletzung beim Lesen von 0000000A), manchmal klappt aber eben alles.

Delphi-Quellcode:
test: array of String;

...

test[1] := 'mööp';
FreeAndNil(test);
Klappt bei mir.
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: FreeAndNil() auf Array anwenden?

  Alt 4. Jan 2007, 17:34
Ist es denn ein dynamisches oder ein statisches Array?
€dit: Roter Kasten, ich vermisse dich -.-
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: FreeAndNil() auf Array anwenden?

  Alt 4. Jan 2007, 18:10
Schaut euch doch einfach mal den Code an .
Delphi-Quellcode:
procedure FreeAndNil(var Obj); // <- untypisiert
var
  Temp: TObject;
begin
  Temp := TObject(Obj); // <-- pitterpöser Cast
Das wird zu 99% schiefgehn. Umso schlimmer, wenn es dann keine AV gibt.
Fragt sich nur, warum der Parameter untypisiert ist .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Balu der Bär
(Gast)

n/a Beiträge
 
#6

Re: FreeAndNil() auf Array anwenden?

  Alt 4. Jan 2007, 18:14
Nein, das eigentliche FreeAndNil(array) geht niemals schief. Nur beim späteren Arbeiten mit dem Array (z.B. Nachfüllen von Daten) kommt es halt in unregelmäßigen Abständen zu Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: FreeAndNil() auf Array anwenden?

  Alt 4. Jan 2007, 18:48
Warum nicht einfach mit SetLength die Größe auf 0 setzen?
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#8

Re: FreeAndNil() auf Array anwenden?

  Alt 4. Jan 2007, 18:49
Zitat von Khabarakh:
Das wird zu 99% schiefgehn.
Auf einen Array angewendet sollte das zu 100% schiefgehen.
Schreib dir doch einen Overload zu FreeAndNil für dyn. Arrays. Falls du es gar zu dringend vermisst.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von Mr_G
Mr_G

Registriert seit: 2. Sep 2004
Ort: Duisburg
468 Beiträge
 
Delphi 2006 Professional
 
#9

Re: FreeAndNil() auf Array anwenden?

  Alt 4. Jan 2007, 19:01
Also ich dachte immer, dass FreeAndNil eine Kombination aus ".Free" und ":= nil" sein soll (was es scheinbar auch ist):
Delphi-Quellcode:
ObjectX.Free;
ObjectX := nil;
//oder:
FreeAndNil(ObjectX);
Daher wäre ich irgendwie sowieso nie auf die Idee gekommen das auf ein Array (Array <> Objekt) anzuwenden.

Zitat von Balu der Bär:
Nein, das eigentliche FreeAndNil(array) geht niemals schief. Nur beim späteren Arbeiten mit dem Array (z.B. Nachfüllen von Daten) kommt es halt in unregelmäßigen Abständen zu Fehlern.
Also wenn ich FreeAndNil nutze (wenn auch nicht für Arrays ), dann doch um Speicher freizugeben. Das es danach zu Fehlern kommen muss wenn man versucht auf das Objekt (in diesem Fall ja Array) zuzugreifen ist doch logisch, oder?
Jan
  Mit Zitat antworten Zitat
Balu der Bär
(Gast)

n/a Beiträge
 
#10

Re: FreeAndNil() auf Array anwenden?

  Alt 4. Jan 2007, 19:06
Zitat von Mr_G:
Das es danach zu Fehlern kommen muss wenn man versucht auf das Objekt (in diesem Fall ja Array) zuzugreifen ist doch logisch, oder?
Naja wenn ich ein Objekt nach FreeAndNil wieder erstelle, kann ich auch wieder damit arbeiten.

Aber es ging wie gesagt nicht um mich, wenn mich jemand solche Sachen fragt die ich selber nicht weiß muss halt die DP ran. Ich werde ihm also raten das Array anders zu leeren, ohne FreeAndNil.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:10 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