AGB  ·  Datenschutz  ·  Impressum  







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

Zeiger auf TlistItem wird nil

Ein Thema von gekmihesg · begonnen am 15. Dez 2004 · letzter Beitrag vom 15. Dez 2004
Antwort Antwort
gekmihesg
(Gast)

n/a Beiträge
 
#1

Zeiger auf TlistItem wird nil

  Alt 15. Dez 2004, 16:16
hallo.
ich hab ein problem mit einem zeiger.

und zwar habe ich ein dynamisches array eines records der auch eine zeigervariable für ein TListItem enthält.

in einer procedure erweitere ich jetzt das array um 1 und weise der zeigervarible eine speicheradresse zu. wenn ich im lauf der procedure is die adresse noch gespeichert.
aber später versuch ich dann in einer anderen procedure auf den wert (oder auf das TListItem) zuzugreifen und die varible is plötzlich nil.

was hab ich da falsch gemacht? ich bin etwas aus der übung
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Zeiger auf TlistItem wird nil

  Alt 15. Dez 2004, 16:19
Wie weist du dem Array das TListItem zu? Quellcode kann nur schaden, wenn du zuviel davon postet.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
gekmihesg
(Gast)

n/a Beiträge
 
#3

Re: Zeiger auf TlistItem wird nil

  Alt 15. Dez 2004, 16:24
na gut

Delphi-Quellcode:
type
  TUser = record
    name: string;
    ip: string;
    status: integer;
    lvp: ^TListItem;
  end;

users: array of TUser;

procedure TForm1.AddUser(user: TUser);
var
  a: TListItem;
  i: integer;
begin
  if IndexByIP(user.ip) <> -1 then
    begin
      UpdateUser(IndexByIp(user.ip),user);
      exit;
    end;

  if IndexByName(user.name) <> -1 then
    begin
      i := 1;
      while IndexByName(user.name + ' (' + inttostr(i) + ')') <> -1 do
        inc(i);
      user.name := user.name + ' (' + inttostr(i) + ')';
    end;

  a := userlv.Items.Add;
  a.Caption := user.name;
  user.lvp := @a; // hier wird die adresse zugewiesen
  setLength(users,length(users)+1);
  users[high(users)] := user;

  if users[high(users)].lvp = nil then // hier nur zum testen. da gehts noch
  showmessage('nil');

  if user.status = stat_away then
    a.ImageIndex := 1
  else
    a.ImageIndex := 0;
end;

procedure TForm1.UpdateUser(index: integer; user: TUser);
begin
  users[index] := user;
  showmessage(users[index].name); // user wird richtig erkannt
// users[index].lv^.Caption := user.name; geht nich
  if users[index].lvp = nil then // gibt true, also der wert is weg
  showmessage('nil');
end;
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Zeiger auf TlistItem wird nil

  Alt 15. Dez 2004, 16:43
Hi,
Ist ein TListItem nicht bereits ein Zeiger?

Delphi-Quellcode:
type
  TUser = record
    name: string;
    ip: string;
    status: integer;
    lvp: TListItem;
  end;
PS: Leite deinen Typ doch von TObject ab und nimm anstelle eines Arrays TList, lässt sich imho leichter handhaben
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#5

Re: Zeiger auf TlistItem wird nil

  Alt 15. Dez 2004, 16:43
Dein Fehler ist, dass a eine Lokale Variable ist die nach der Funktion überschrieben wird. Mit @a bekommst du die Adresse davon und diese wird abgespeichert.

Alle Objekte (auch TListItem) sind bereits Pointer. Was du erzeugst sind Pointer auf Pointer. Mach also folgendes:

1. Record ändern und das ^ entfernen.

Delphi-Quellcode:
TUser = record
    name: string;
    ip: string;
    status: integer;
    lvp: TListItem;
  end;
2. user.lvp := @a; nach user.lvp := a; ändern

und 3. Überall beim Zugriff auf lvp das ^ entfernen.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
gekmihesg
(Gast)

n/a Beiträge
 
#6

Re: Zeiger auf TlistItem wird nil

  Alt 15. Dez 2004, 17:34
oh naja wenn das so einfach is...
vielen dank

doch nich.
genau das gleiche problem...
  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 07:21 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