Autor Téma: TObjectList<T>.Clear - AV  (Přečteno 396 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2976
  • Karma: 29
    • Verze Delphi: XE7 professional
TObjectList<T>.Clear - AV
« kdy: 21-04-2017, 12:55:45 »

Kód: Delphi [Vybrat]
  1.   FlstConsumptionData: TObjectList<TConsumptionData>;
Príkaz
Kód: Delphi [Vybrat]
  1.   FlstConsumptionData.Clear;
  2.  
mi len po pár opakovaniach padne na AV. Hneď pri Count := 0; (viď prílohu). Netuším prečo. Sú tam dve naplnené položky.

Access violation at address 004097BA in module 'JasotSVB.exe'. Read of address 00000002
« Poslední změna: 21-04-2017, 13:05:20 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2976
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:TObjectList<T>.Clear - AV
« Odpověď #1 kdy: 21-04-2017, 13:19:40 »
Tak nič. Mal som jednu funkciu, kde som si prehadzoval poradie prvkov. Tú som nahradil pomocou Sort a problém zmizol.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline bohdan

  • Nováček
  • *
  • Příspěvků: 45
  • Karma: 0
Re:TObjectList<T>.Clear - AV
« Odpověď #2 kdy: 21-04-2017, 20:32:39 »
Nepíšeš jak ten objekt zakládáš. Jednou mi taky nechtěl fungovat TList<record> a bylo to v tom, ze jsem zakládal object jako
x:= TList.create místo x:=TList<record>.Create.

Pokud tedy zakládáš objekt jako
FlstConsumptionData := TObjectList.create tak to by mohl být ten problém.

Mělo by být
FlstConsumptionData := TObjectList<TConsumptionData>.create




Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2976
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:TObjectList<T>.Clear - AV
« Odpověď #3 kdy: 21-04-2017, 21:49:52 »
Citace
x:= TList.create místo x:=TList<record>.Create.
Na to si dávam pozor. V tom to nebolo. Spôsobovala to táto procedúra
Kód: Delphi [Vybrat]
  1. procedure TConsumption.MoveDataAndGetIdx;
  2. var
  3.   I: Integer;
  4.   FIdx: Integer;
  5. begin
  6.   FIdx := - 1;
  7.  
  8.   for I := 0 to FlstConsumptionData.Count - 1 do
  9.   begin
  10.     if frmConsumption.jstdtpckrDateReading.Date < FlstConsumptionData[I].Reading then  
  11.     begin
  12.       FIdx := I;
  13.       Break;
  14.     end;
  15.   end;
  16.  
  17.   if (FIdx = - 1) then
  18.   begin
  19.     if FHotDB.DesiredDtSt = dsInsert then
  20.       FIdx := FlstConsumptionData.Count
  21.     else
  22.       Exit;  // Žiadna zmena poradia ani vloženie záznamu.
  23.   end ;
  24.  
  25.   if FHotDB.DesiredDtSt = dsEdit then
  26.   begin
  27.     if FOldIdx <> (FIdx -1) then
  28.       FlstConsumptionData.Move(FOldIdx, FIdx);
  29.   end
  30.   else
  31.   if FHotDB.DesiredDtSt = dsInsert then
  32.     FlstConsumptionData.Insert(FIdx, FNewData);
  33.  
  34.   FOldIdx := -1;
  35. end;
  36.  
Ja v nej problém nevidím.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1853
  • Karma: 87
    • Verze Delphi: D2007, XE3, DX10
Re:TObjectList<T>.Clear - AV
« Odpověď #4 kdy: 22-04-2017, 19:54:40 »
Ja v nej problém nevidím.
A debugger ti nefungoval, ze bys trasovanim zjistil, na cem k te AV dojde?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2976
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:TObjectList<T>.Clear - AV
« Odpověď #5 kdy: 23-04-2017, 10:07:48 »
Keďže som tú funkciu vyhodil, tak som to už neriešil. Nemal som na to náladu.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: