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 5 von 9   « Erste     345 67     Letzte »    
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#41

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 14:58
Hallo,
Zitat von Neutral General:
Damit dürften wohl alle Zweifel und Unklarheiten aus der Welt geschafft sein
Gab es noch welche? klick

Gruß Hawkeye
  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
 
#42

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 15:03
ups

Hab aber nicht abgeschrieben, ehrlich
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
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#43

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 15:09
Bei verschachtelten Records läuft das genauso.

Delphi-Quellcode:
    MyRecord : record
      nr : Integer;
      name : string [10];
      MyRecord2 : record
        nr : Integer;
        name : string [10];
      end;
    end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyRecord.nr := 1;
  MyRecord.name := 'XYZ';
  MyRecord.MyRecord2.nr := 2;
  MyRecord.MyRecord2.name := 'XYZ2';
  memo2.Lines.Add(IntToStr(MyRecord.nr));
  memo2.Lines.Add('*'+MyRecord.name+'*');
  memo2.Lines.Add('');
  FillChar (MyRecord,SizeOf (MyRecord),0);
  memo2.Lines.Add(IntToStr(MyRecord.nr));
  memo2.Lines.Add('*'+MyRecord.name+'*');
  memo2.Lines.Add(IntToStr(MyRecord.MyRecord2.nr));
  memo2.Lines.Add('*'+MyRecord.MyRecord2.name+'*');
end;
Ergebnis : Anhang. In diesem Beispiel ist auch das Finalize völlig überflüssig.
Miniaturansicht angehängter Grafiken
unbenannt_282.jpg  
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

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

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 15:15
Hatten wir nicht gerade, dass bei globalen Variablen mit der Methode ein MemoryLeak auftritt ?!
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
 
#45

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 15:26
Zitat von Hansa:
Bei verschachtelten Records läuft das genauso.

Delphi-Quellcode:
    MyRecord : record
      nr : Integer;
      name : string [10];
      MyRecord2 : record
        nr : Integer;
        name : string [10];
      end;
    end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyRecord.nr := 1;
  MyRecord.name := 'XYZ';
  MyRecord.MyRecord2.nr := 2;
  MyRecord.MyRecord2.name := 'XYZ2';
  memo2.Lines.Add(IntToStr(MyRecord.nr));
  memo2.Lines.Add('*'+MyRecord.name+'*');
  memo2.Lines.Add('');
  FillChar (MyRecord,SizeOf (MyRecord),0);
  memo2.Lines.Add(IntToStr(MyRecord.nr));
  memo2.Lines.Add('*'+MyRecord.name+'*');
  memo2.Lines.Add(IntToStr(MyRecord.MyRecord2.nr));
  memo2.Lines.Add('*'+MyRecord.MyRecord2.name+'*');
end;
Ergebnis : Anhang. In diesem Beispiel ist auch das Finalize völlig überflüssig.
Zitat von SubData:
Hatten wir nicht gerade, dass bei globalen Variablen mit der Methode ein MemoryLeak auftritt ?!
Dieses Beispiel ist in diesem Thread hier total fehl am Platz. Dadurch, dass Hansa jetzt in seinem Record Shortstrings benutzt hat, gibts das Problem natürlich nicht. ShortStrings sind eben keine Pointer. Von daher ist ein Finalize tatsächlich nicht nötig. Was Hansa jetzt damit sagen/verdeutlichen will, weiß ich allerdings nicht. Mir scheint, als hätte er nicht verstanden, worum es hier in dieser Diskussion geht.
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
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#46

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 15:32
Hallo,

noch einmal zur Klarstellung:

Bei referenzgezählten Daten (dynamische Strings und Arrays, Interfaces) sollte ein Aufruf von Finalize vorgeschaltet werden, damit die internen Verwaltungsinformationen aufgeräumt werden können. Der Compiler erzeugt dabei einen Aufuf der zugehörigen RTL-Routine, die selbst feststellen kann, welche Felder des Records finalisiert werden müssen. Dies sollte mit beliebig geschachtelten Datentypen funktionieren. "Einfache" Zeiger werden von Finalize nicht zerstört.

Bei Referenzen auf Speicherbereiche oder Objekte ist der Programmierer selbst für die Freigabe der referenzierten Objekte verantwortlich. Hierzu wird die komplementäre Routine (GetMem/FreeMem, Create/Free,...) aufgerufen, um den Speicher wieder freizugeben.

Einfache Datentypen (Ordinaltypen, Fließkommatypen, kurze Strings(!),...) benötigen keine Aufräumarbeiten.

Ein Aufruf von FillChar darf erst erfolgen, nachdem die Verwaltungsdaten ordnungsgemäß aufgeräumt wurden. Beachtet man dies nicht, entstehen Memory Leaks.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#47

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 15:39
Zitat von Neutral General:
..als hätte er nicht verstanden, worum es hier in dieser Diskussion geht.
Es steht doch in #1, dass es hierum geht :

Delphi-Quellcode:
type
  TMyRecord = record
    Test_1: string;
    Test_2: string;
    Test_3: string;
    Integer_1: integer;
    Integer_2: integer;
  end;

...

MyRecord: TMyRecord;
Und das Ding soll leergemacht werden. Wozu dann soviel Klimbim machen ? Von der Compiler-Direktive $H+ ist nichts zu sehen. Insofern ist das finalize überflüssig und wird sogar vom Linker entfernt.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#48

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 15:43
String ist nicht gleich String[10], das ist der Unterschied.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#49

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 18:35
Moin Hansa,

Zitat von Hansa:
Von der Compiler-Direktive $H+ ist nichts zu sehen.
wozu auch, schliesslich stellt man dies, üblicher Weise, in den Projektoptionen ein.
Ausserdem sind Huge-Strings auch die Standardeinstellung.
Hast Du es bei Dir umgestellt?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#50

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 18:49
Zitat von Christian Seehase:
Ausserdem sind Huge-Strings auch die Standardeinstellung.
Hast Du es bei Dir umgestellt?
Ne, nichts umgestellt. Warum auch ? Die Screenshots wurden produziert mit Projektoptionen-Checkbox "Huge-Strings" angehakt. Mache ich aus dem string [10] nur string, dann gehts genauso. @DeddyH
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 9   « Erste     345 67     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 03:44 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