TObjectHash wybucha przy Clear

0

Znalazłem alternatywę dla TStringList. Pakiet "Generic Associative Arrays" (TStringHash, TIntegerHash i TObjectHash). Każdą z nich tworzę tak samo, deklaruje zmienną danego typu i tworze np. Lista := TStringHash.Create. Zwalniam przez Free. Przy czyszczeniu TObjectHash (czy to przez clear, destroy czy free) mam Acces Violation. Przy innych jest ok, nie wiem czy to błąd klasy czy to ja coś nie tak robię. Ktoś ma podobny problem? Jak

0

pokaz jakis src jak tworzysz, jak czyścisz, jak zwalniasz , ustaw breakpointy i praca krokowa w ktorej linii wywala?

0

To jest zwykłe tworzenie obiektu. Wywala się przy najprostszym, np.:

var
  HashLista: TObjectHash;
  S: String;
begin
  HashLista := TObjectHash.Create;
  S := 'Jakiś tekst';
  try
    HashLista.Items['Jakis_Klucz'] := TObject(S);
    //teraz przy usuwaniu pojedyńczego itema lub czyszczeniu całej listy wybucha
    HashLista.Clear;
  finally
    HashLista.Free;
  end;
end;

Wybucha w metodzie THash.Clear (czy jakoś tak pisze z pamięci bo jestem w pracy), w pętelce która zwalnia każdy item, chyba coś w stylu: Self.f_Items[i].Free; To wszystko jakieś dziwne bo TStringHash i TIntegerHash działa ok. A na dodatek strona domowa tego komponentu nie ładuje mi się, może jest jakaś aktualizacja...

0

poczytaj, czy się tam przypadkiem nie dodaje obiektów przez Add

0

Właśnie nie ma takiego czegoś jak Add ani AddObject :\ . Wszystko działa na podobnej zasadzie co tablice asocjacyjne, tj. w powyższym przykładzie.

0

to jest to ? http://www.koders.com/delphi/fid6D68378B86DF8152759A4C936ED8EFAF4730A125.aspx

procedure TObjectHash.AddObject(Obj: TBaseObject);

0

To chyba jakiś podobny komponent ale nie ten. W każdym razie już sobie poradziłem. Popytałem na grupach dyskusyjnych. Czyli tak, nie wiedziałem że TObjectHash jest kontenerem i troszczy się o los obiektów które do niego dodajemy, więc przy clear starał się zwolnić obiekt z pamięci który mu przypisałem, a to że nie dodawałem do niego obiektów tylko rzutowałem na stringi kończyło się błędem.
Pozdrawiam, temat zamknięty.

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