Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dispose von Recorddaten in Combobox (https://www.delphipraxis.net/136835-dispose-von-recorddaten-combobox.html)

Sereby 8. Jul 2009 19:39


Dispose von Recorddaten in Combobox
 
Hiho,

ich habe folgendes Problem:
ich füge einer combobox ein record mit folgendem code hinzu:
Delphi-Quellcode:
type
  TLangRec = record
    LangCode: String;
  end;
  PLangRec = ^TLangRec;

..
var
LangCode: PLangRec;
begin
  New(LangCode);
  LangCode^.LangCode := '1031';
  LangCombo.Items.AddObject(LanguageName, TObject(LangCode^));
end;
hier nun das problem:
Delphi-Quellcode:
var
  I: Integer;
  LangCode: TLangRec;
begin
  for I := LangCombo.Items.Count - 1 downto 0 do
  begin
    LangCode := TLangRec(LangCombo.Items.Objects[I]);
    Showmessage(LangCode.LangCode); //das funktioniert noch..
    Dispose(PLangRec(LangCode)); //bääääm
  end;
Das Showmessage funktioniert ohne probleme aber bei dem Dispose knallts dann mit ner zugriffsverletzung!
Das Showmessage habe ich nur testweise eingebaut um zu gucken ob der überhaupt was brauchbares macht.

edit: ich verwende Delphi 2009 auf Windows 7 x64 und das neueste FastMM4

himitsu 8. Jul 2009 20:02

Re: Dispose von Recorddaten in Combobox
 
Delphi-Quellcode:
var
  I: Integer;
  LangCode: TLangRec;
begin
  for I := LangCombo.Items.Count - 1 downto 0 do
  begin
    // hier legst du eine Kopie der Daten an
    LangCode := TLangRec(LangCombo.Items.Objects[I]);
    ...
    // und hier versuchst du die Variable "LangCode" freizugeben, welche
    // auf dem Stack liegt und nicht die Variable in der ComboBox
    Dispose(PLangRec(LangCode));
  end;

Delphi-Quellcode:
var LangCode: PLangRec;
begin
  New(LangCode);
  // dereferenzierung nicht nötig, daß macht hier Delphi automatisch
  LangCode.LangCode := '1031';
  // und hier darf nicht dereferenziert werden
  LangCombo.Items.AddObject(LanguageName, TObject(LangCode));
end

var
  I: Integer;
  LangCode: PLangRec;
begin
  for I := LangCombo.Items.Count - 1 downto 0 do
  begin
    //
    LangCode := PLangRec(LangCombo.Items.Objects[I]);
    Showmessage(LangCode.LangCode);
    Dispose(LangCode);
  end;

Sereby 8. Jul 2009 20:08

Re: Dispose von Recorddaten in Combobox
 
dankeschön für die prompe hilfe ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:49 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