Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 17, 2025 15:33

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 15, 2004 17:02 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
LarsMiddendorf hat geschrieben:
Weil das dynamische Array x in diesem Beispiel direkt deklariert ist, braucht man das nicht extra mit finalize freizugeben. Am Ende der Funktion wird automatisch DynArrayClear aufgerufen.


Und genau damit schleichen sich die Fehler, die später schwer zu finden sind. Irgendwann aus irgendeinem Grund gibt der Compiler in irgendeiner zukünftigen Version am Ende der Funktion doch mal was nicht frei und dann geht die Sucherei los. Deswegen kleine Faustregel: was man manuell an Speicher reserviert und anlegt, sollte auch manuell wieder freigegeben werden!!! Ist zwar etwas Tipp-Aufwendiger, jedoch ist man dann auf der Sicheren Seite!

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 15, 2004 17:49 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Ich oute mich jetzt mal:
Ich verwende (außer bei AnsiString, von dem ich aber tatsächlich erwarte dass Delphi ihn korrekt verwaltet - was bei älteren Versionen aber durchaus nicht ganz unproblematisch war) überhaupt keine dynamischen Arrays, sondern lege meine dynamischen Daten immer als Zeiger (meist auf ein Array eines bestimmten Typs) an, dessen Speicher ich selbst mittels GetMem und FreeMem alloziere und dealloziere.

Ein Garbage Kollektor wie in C# oder VB.NET ist auch nett - allerdings glauben nun viele Leute nun keine Rücksicht mehr auf Freigaben machen zu müssen, weil eh alles verwaltet wird - ein schlampiger Programmierer kann aber immer noch empfindlich stören, wenn er z.B. eine Referenzvariable mit globalem Gültigkeitsbereich auf Daten verweisen lässt, die eigentlich nicht mehr benötigt werden: der Garbage Collector kann Speicher auch nur dann freigeben, wenn die letzte Referenz verschwunden ist - somit hat man schon das schönste Speicherloch produziert.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 15, 2004 18:41 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Mit dem Garbage Collector kann ich mich auch nicht anfreunden, weil ich eigentlich schon wissen möchte, wann Objekte wieder entfernt werden. Außerdem leidet die Disziplin darunter und man braucht gar nicht mehr nachdenken, was mit den Referenzen eigentlich passiert. Das sollte zu einem schlechteren Programmierstil führen und man kann abstruse Objektgeflechte erstellen. Bei Strings und dynamischen Arrays sehe ich das nicht so eng, weil da keine weiteren Daten dranhängen, die automatisch mit freigegeben werden, und man die Lebenszeit ungefähr einschätzen kann. Bei dynamischen Arrays ist die automatische Referenzzählung angenehm gelöst. Trotzdem kann man die nicht richtig dynamisch einsetzen, daß setlength recht langsam ist. In Delphi 6 ist mir bei den Strings auch schon mal ein Fehler im Zusammenhang mit const Parametern aufgefallen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 15, 2004 19:25 
Offline
DGL Member

Registriert: So Okt 12, 2003 14:53
Beiträge: 74
Zitat:
Initialize ist nur dafür da, daß das Array am Anfang auch leer bzw. nil ist.

Hm. Aber als ich in meinem Programm geschrieben habe : dynArray := nil; ist der Fehler auch aufgetreten, obwohl das ja auch nur eine nil zuweisung ist. Oder versucht Delphi dann den Speicher, auf den das Array vorher gezeigt hat, sofort wieder zu löschen (was dann natürlich in einem Fehler enden würde)?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 15, 2004 19:43 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ja, genaus so ist es. Für Zuweisungen gibt es eine spezielle Funktion (DynArrayAsg) die intern dann aufgerufen wird. Am besten nimmt man bei solchen Datentypen einfach new und dispose und man braucht sich nicht mehr um solche Dinge zu kümmern.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]