AGB  ·  Datenschutz  ·  Impressum  







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

Dispose von Recorddaten in Combobox

Ein Thema von Sereby · begonnen am 8. Jul 2009 · letzter Beitrag vom 8. Jul 2009
Antwort Antwort
Sereby

Registriert seit: 31. Mär 2008
91 Beiträge
 
#1

Dispose von Recorddaten in Combobox

  Alt 8. Jul 2009, 19:39
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#2

Re: Dispose von Recorddaten in Combobox

  Alt 8. Jul 2009, 20:02
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Sereby

Registriert seit: 31. Mär 2008
91 Beiträge
 
#3

Re: Dispose von Recorddaten in Combobox

  Alt 8. Jul 2009, 20:08
dankeschön für die prompe hilfe
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:39 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