AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Record zurücksetzen (löschen)

Ein Thema von Guido Eisenbeis · begonnen am 14. Sep 2008 · letzter Beitrag vom 10. Okt 2008
Antwort Antwort
Seite 9 von 9   « Erste     789
Rosenwehr

Registriert seit: 27. Apr 2006
Ort: Berlin
5 Beiträge
 
Delphi 2005 Professional
 
#81

Re: Record zurücksetzen (löschen)

  Alt 9. Okt 2008, 14:17
Lösungsvorschlag für Delphi 2005 Anwender:

1. Record definieren wie gehabt (ohne procedure)
2. Variable als Array erzeugen, z.B. MyRecord: Array of TMyRecord
3. Array leeren: SetLength(MyRecord,0)
4. Array mit "einem Record" erzeugen: SetLength(MyRecord,1)
5. Zugriff: MyRecord[0].ElementofRecord
Bsp. für zuweisen: MyRecord[0].string1:='abc'
Bsp. für auslesen: stringvariable:=MyRecord[0].string1

Hinweis: Für D7 wird zum Array leeren: MyRecord := NIL in der D7-Hilfe beschrieben.
Der Tag hat 24 Stunden.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Record zurücksetzen (löschen)

  Alt 9. Okt 2008, 14:19
Damit löschst Du das Array, aber nicht den Record.

[edit] Nicht ganz richtig: Du löschst den Zeiger auf das Array. Wenn da vorher kein SetLength auf 0 aufgerufen wird, hast Du mit ziemlicher Sicherheit ein Speicherleck [/edit]
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
Rosenwehr

Registriert seit: 27. Apr 2006
Ort: Berlin
5 Beiträge
 
Delphi 2005 Professional
 
#83

Re: Record zurücksetzen (löschen)

  Alt 9. Okt 2008, 20:47
Heist das also, das mit der oben genannten Reihenfolge alles i.o. ist?

Wie kann ich mein Programm auf Speicherleck prüfen? In meiner procedure rufe ich am Anfang einer Schleife SetLength(MyRecord,0) dann SetLength(MyRecord,1) auf.

Das Array (mit dem einen Record) wird in einer aufgerufenen Unterprocedure abschließend ausgewertet und der Inhalt auch nicht mehr benötigt. Beim nächsten Schleifeneintritt SetLength(MyRecord,0) dann SetLength(MyRecord,1) usw.

Gibt es eine elegantere Lösung für D2005? Inwiefern werden Ressourcen verschwendet bzw. liegt unsauberer Programmierstil vor?
Der Tag hat 24 Stunden.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#84

Re: Record zurücksetzen (löschen)

  Alt 10. Okt 2008, 10:55
Zitat von Rosenwehr:
Heist das also, das mit der oben genannten Reihenfolge alles i.o. ist?

Wie kann ich mein Programm auf Speicherleck prüfen? In meiner procedure rufe ich am Anfang einer Schleife SetLength(MyRecord,0) dann SetLength(MyRecord,1) auf.

Das Array (mit dem einen Record) wird in einer aufgerufenen Unterprocedure abschließend ausgewertet und der Inhalt auch nicht mehr benötigt. Beim nächsten Schleifeneintritt SetLength(MyRecord,0) dann SetLength(MyRecord,1) usw.

Gibt es eine elegantere Lösung für D2005? Inwiefern werden Ressourcen verschwendet bzw. liegt unsauberer Programmierstil vor?
Hallo,

bei der Abfolge lässt du nach der Bearbeitung den Array mit Länge 1 zurück, obwohl er nicht mehr benötigt wird. Das ist noch kein Speicherleck, aber man könnte nach Gebrauch die Länge wieder auf 0 setzen.

Eine weitere Möglichkeit: Setzen des Records und die Auswertung in eine Prozedur zusammenfassen und den record als lokale Variable definieren, und zwar als stinknormalen Record. Der wird bei Eintritt automatisch genullt und beim Verlassen aufgeräumt. Ist halt bloss normales Pascal und nicht so geil wie dynamische Arrays und Records mit Prozeduren.

Gruss Reinhard
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#85

Re: Record zurücksetzen (löschen)

  Alt 10. Okt 2008, 11:13
Ich frage mich, weshalb nach so vielen Beiträgen immer noch am Record festgehalten wird, obwohl doch hier alles für die Verwendung einer Klasse spricht.
Eine Klasse ist einem Record dann vorzuziehen, wenn Operationen mit dem Record durchgeführt werden sollen (wir im vorliegenden Beispiel Clear()).
Wenn dann noch der Bedarf nach weiteren Methoden da ist, braucht man gar nicht weiterüberlegen, sondern sofort zur Klasse greifen.
Das ist doch die Kernaussage der objektorientierten Programmierung, dass Daten und Methoden zu einer Klasse zusammengeführt werden.
Es gibt nur wenige Ausnahmen, wie z.B. Records die nur sehr wenige Daten enthalten (TPoint, TRect, TComplexNumber).
Hier kann man um Resourcen zu sparen weiterhin beim Record bleiben.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

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

Re: Record zurücksetzen (löschen)

  Alt 10. Okt 2008, 11:48
Der Vorteil von Records ist, dass man diese wesentlich besser an DLLs übergeben kann
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#87

Re: Record zurücksetzen (löschen)

  Alt 10. Okt 2008, 12:13
Zitat von shmia:
...Es gibt nur wenige Ausnahmen, wie z.B. Records die nur sehr wenige Daten enthalten (TPoint, TRect, TComplexNumber).
Hier kann man um Resourcen zu sparen weiterhin beim Record bleiben.
Hallo,

man kann viel für und gegen Records anführen, besonders dann, wenn man wie hier üblich jedes Problem auf möglichst komplizierte Weise lösen will, um damit anzugeben. Aber ganz sicher ist die Länge eines Records dafür KEIN Gesichtspunkt.

Im wahren Leben geht es um möglichst einfache Lösungen und nicht um fanatisch vertretene Ideologien. Ich habe schon vor vielen Jahren Programmiersysteme getestet, in denen zur absolut konsequenten Umsetzung der OO auch ein einzelnes Bit eine Klasse war mit Methoden für und, oder usw. Das war Blödsinn, ist es immer noch und wird es auch bleiben. Kein Kühlschrank und keine Waschmaschine funktioniert so, Theorie her oder hin.

Gruss Reinhard
  Mit Zitat antworten Zitat
Guido Eisenbeis

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

Re: Record zurücksetzen (löschen)

  Alt 10. Okt 2008, 12:18
Ein wahres Wort, gelassen ausgesprochen! *zustimm*

Guido.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:13 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