AGB  ·  Datenschutz  ·  Impressum  







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

Speicherfreigabe mit Dispose

Ein Thema von JRadke · begonnen am 9. Dez 2017 · letzter Beitrag vom 11. Dez 2017
 
JRadke

Registriert seit: 23. Feb 2006
Ort: Hamburg
18 Beiträge
 
#1

Speicherfreigabe mit Dispose

  Alt 9. Dez 2017, 18:21
Ich habe ein Verständnisproblem bei der Speicherfreigabe mit Dispose.
Ich habe mir einen Ringspeicher zur Aufnahme von Messdaten auf Basis eines TList definiert.
Vor dem Hinzufügen eines neuen Elements wird zunächst geprüft, ob die Maximalgröße des Buffers erreicht ist und gegebenenfalls das älteste Element (also das erste in der Liste gelöscht).
Im Code sieht das etwa so aus:

Code:
Buffer: TList;

procedure AddRecord(ARecord: TDataRecord);
var
  P: PDataRecord;
begin
  New(P);
  P^.Values := Copy(ARecord.Values);
  if Buffer.Count = fMaxBufSize then begin
    Dispose(Buffer.Items[0]);
    Buffer.Delete(0);
  end;
  Buffer.Add(P);
end;
Hierbei wird aber durch Dispose der Speicherplatz des Elements Buffer.Items[0] nicht freigegeben!
Erst wenn ich den Code wie folgt umschreibe, funktioniert es:

Code:
procedure AddRecord(ARecord: TDataRecord);
var
  P, P2: PDataRecord;
begin
  New(P);
  P^.Values := Copy(ARecord.Values);
  if Buffer.Count = fMaxBufSize then begin
    P2 := Buffer.Items[0];
    Dispose(P2);
    Buffer.Delete(0);
  end;
  Buffer.Add(P);
end;
Kann mir jemand den Unterschied erklären?
Das Problem führte bei mir nach einigen Wochen Programmlaufzeit zu einem Speicherfehler und war daher sehr schwer zu lokalisieren.
  Mit Zitat antworten Zitat
 


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 06:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz