AGB  ·  Datenschutz  ·  Impressum  







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

Record zurücksetzen (löschen)

Ein Thema von Guido Eisenbeis · begonnen am 14. Sep 2008 · letzter Beitrag vom 10. Okt 2008
Antwort Antwort
Seite 4 von 9   « Erste     234 56     Letzte »    
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#31

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 13:29
@SubData: Die Hilfe hilft:
Zitat:
Dynamic variables that are ordinarily managed by the compiler (long strings, wide strings, dynamic arrays, variants, and interfaces) can be declared with threadvar, but the compiler does not automatically free the heap-allocated memory created by each thread of execution. If you use these data types in thread variables, it is your responsibility to dispose of their memory from within the thread, before the thread terminates.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#32

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 13:32
Weiß ich, hab ich danach auch gelesen.
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#33

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 13:33
Zitat von Popov:
Zitat von Guido Eisenbeis:
Was aber machst du, wenn, wie oben beschrieben, dein Record noch andere Records enthält?
Wird nur etwas länger.
Delphi-Quellcode:
Finalize(Record);
FillChar(Record,SizeOf(TRecord),0);
Ist die ultimative Lösung Damit werden auch Subrecords aufgeräumt. Habs ausprobiert.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#34

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 13:37
Zitat von Popov:
Wird nur etwas länger.
Optimist *smile*


@Michael + Ronny

Danke für die Infos! Also seid ihr der Meinung, dass mit Finalize + FillChar sauber gearbeitet wird?

Guido.
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#35

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 13:39
Ja

Und bei der Gelegenheit: FastMM
Hilft dabei Speicherlecks zu finden (Und optimiert auch gleich die Anwendung)
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#36

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 13:39
Zitat von Neutral General:
Delphi-Quellcode:
Finalize(Record);
FillChar(Record,SizeOf(TRecord),0);
Ist die ultimative Lösung Damit werden auch Subrecords aufgeräumt. Habs ausprobiert.
Danke! Ich wollte diesbezüglich auch gerade Tests durchführen. Hast du mir erspart! *freu*

Guido.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#37

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 13:57
Hi,

In den neueren Delphiversionen kann mans noch in eine Methode packen. Ist dann nachher etwas bequemer:

Delphi-Quellcode:
type
  TRecord = record
    // ...
    procedure Clear;
  end;

procedure TRecord.Clear;
begin
  Finalize(Self);
  FillChar(Self,SizeOf(Self),0);
end;
Edit: Schade, dass es keine Vererbung bei Records gibt, sonst hätte man da was TObject-mäßiges bauen können
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#38

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 14:16
Zitat von Neutral General:
Delphi-Quellcode:
Finalize(Record);
FillChar(Record,SizeOf(TRecord),0);
Also funktionieren tut es ja, aber ist das auch sauber? Also ich hab mich schon lange nicht mehr mit dem inneren Aufbau der Variablen beschäftigt, aber wie lang ist ein String im Speicher? Also "Hallo" dürfte 5 Zeichen lang sein und ist es nicht so, daß die Länge 5 auch vermerkt wird? Wenn ich sie nun auf 0 stelle, kürze ich die zwar, hinterlasse aber, zwar genullten Bereich, aber immerhin, im Speicher.

Wie gesagt, interessiert mich nur etwas. Kann auch falsch sein.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#39

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 14:17
Zitat von Neutral General:
Edit: Schade, dass es keine Vererbung bei Records gibt, sonst hätte man da was TObject-mäßiges bauen können
Wieso nicht gleich eine Klasse?
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#40

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 14:31
Zitat von Popov:
Zitat von Neutral General:
Delphi-Quellcode:
Finalize(Record);
FillChar(Record,SizeOf(TRecord),0);
Also funktionieren tut es ja, aber ist das auch sauber? Also ich hab mich schon lange nicht mehr mit dem inneren Aufbau der Variablen beschäftigt, aber wie lang ist ein String im Speicher? Also "Hallo" dürfte 5 Zeichen lang sein und ist es nicht so, daß die Länge 5 auch vermerkt wird? Wenn ich sie nun auf 0 stelle, kürze ich die zwar, hinterlasse aber, zwar genullten Bereich, aber immerhin, im Speicher.

Wie gesagt, interessiert mich nur etwas. Kann auch falsch sein.
Ich gehe einfach mal davon aus, dass Finalize das übernimmt. Wie gesagt. Es gibt ohne Finalize ein MemoryLeak, mit nicht.

Edit: Hab mal was ausprobiert:
Delphi-Quellcode:
// EinString = 'Test';
procedure TRecord.Clear;
begin
  ShowMessage(EinString); // 'Test'
  Finalize(Self);
  ShowMessage(EinString); // ''
  FillChar(Self,SizeOf(Self),0);
end;
Damit dürften wohl alle Zweifel und Unklarheiten aus der Welt geschafft sein

Zitat von Popov:
Zitat von Neutral General:
Edit: Schade, dass es keine Vererbung bei Records gibt, sonst hätte man da was TObject-mäßiges bauen können
Wieso nicht gleich eine Klasse?
Frag mich das nicht. Ich benutze seit einiger Zeit keine Records mehr Aber würde halt Spaß machen son TRecord zu bauen
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 9   « Erste     234 56     Letzte »    


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 07:01 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