Vážená skupino,
narazil jsem na podivné chování Delphi 10.4 ve spojení s Generics.Collections.TList<>. Aplikace má samostatné vlákno ukládající každých 5 sekund nasbíraná data do souboru. Vše funguje bez problémů, resp. fungovalo. Teď aktualizuji starý kód na zpracování DXF výkresů a nově jsem použil TList<record> v domění, že si ušetřím práci oproti klasickým polím. TListy vytvářím (xxx := TList<record>.Create;), pak uvolňuji (xxx.Free), tak jak je to korektní. Důležité - TList nemá s ukládacím vláknem ABSOLUTNĚ NIC společného. Jakmile ale TListy použiji, vlákno v momentě ukládání vyhlásí chybu čtění paměti (ACCESS_VIOLATION). Chybu vyvolají vždy funkce v System na principu ReallocMem/SetLength při skládání stringů před jejich vysypáním do souboru.
Dotaz - Nesetkal se někdo s podobným problémem?
Když TList vykomentuji, tak vše funguje bez sebemenšího problému. Kód je správně, protože dělá co má. Asi to přepíši na klasická pole, protože TList je cca 3x pomalejší, navíc TList nelze ani rozumě debugovat.
Děkuji.