[PR]Problem ze wskaźnikami

0

mam taki kodzik do tworzenia trzech list wskażników robionych przez New:

var
  pTBR: PTBRec;
  I, J: Integer;
begin
  AllRecs:=TList.Create;
  AvilRecs:=Tlist.Create;
  OnTBRecs:=TList.Create;
  New(pTBR);
  pTBR^.Style:=Ord(tbsSeparator);
  pTBR^.Action:=-1;
  AvilRecs.Add(pTBR);
  for I:=0 to Main.alActions.ActionCount-1 do
    begin
      New(pTBR);
      pTBR^.Style:=Ord(tbsButton);
      pTBR^.Action:=I;
      if copy(Main.alActions.Actions[I].Name, 1, 3)<>'act' then
        begin
          Dispose(pTBR);
          Continue;
        end;
      AllRecs.Add(pTBR);
    end;
  for I:=0 to AllRecs.Count-1 do
    begin
      AvilRecs.Add(AllRecs.Items[I]);
    end;
  if Main.tlbrToolBar.ButtonCount>0 then
    for I:=0 to Main.tlbrToolBar.ButtonCount-1 do
      begin
        New(pTBR);
        pTBR^.Style:=Ord(Main.tlbrToolBar.Buttons[I].Style);
        if pTBR^.Style=Byte(tbsButton) then
          begin
            pTBR^.Action:=(Main.tlbrToolBar.Buttons[I].Action as TContainedAction).Index;
            for J:=0 to AvilRecs.Count-1 do
              begin
                if PTBRec(AvilRecs.Items[J])^.Action=pTBR^.Action then
                  begin
                    AvilRecs.Delete(J);
                    Break;
                  end;
              end;
          end
        else
          pTBR^.Action:=-1;
        OnTBRecs.Add(pTBR);
      end;
end;

tearaz jak pod koniec działania usera wzwolnić wszystkie wskażniki (chodzi o dispose, ale wywala mi invalid pointer operation przy którymś z itemów i nie moge dojść o który chodzi), poza tym jedna informacja AllRecs ma wszystko, natomias zawartość AvilRecs i OnTBRecs się zmienia ale nigdy nie poza to co jest w AllRecs.

Próbowałam pentelek for ale właśnie przy jednym z itemów invalid pointer operation.

Ale nagmatwałem ;-P

0

Juz sobie poradzilem: chodziło o to że potraktowałem pointera tak jak zachowanie stringa (kopiowanie się) i uzywałem często dispose przy operacjach na liście, okazało sie że wywalenie dispose przy operacjach na liście i kombinowanie z TList.Pack pomogło znacznie.

Dzięki za brak zainteresowania [cya]

1 użytkowników online, w tym zalogowanych: 0, gości: 1