Autor Téma: FastMM detected that a block has been modified after being freed  (Přečteno 349 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional

Mám na podformulári vnorený podformulár a na ňom VST tabuľky. Táto chyba mi vyskočí jedine pri objektoch, kde VST boli naplnené údajmi. Už sa s tým naťahujem celý deň a neviem s tým hnúť. Formulár len zobrazím a hneď zavriem.
Kód: Delphi [Vybrat]
  1. FastMM has detected an error during a free block scan operation. FastMM detected that a block has been modified after being freed.
  2. .
  3. Modified byte offsets (and lengths): 60(4)
  4. The previous block size was: 132
  5. .
  6. This block was previously allocated by thread 0x26DC, and the stack trace (return addresses) at the time was:
  7. 406CF6 [System.pas][System][@GetMem$qqri][4391]
  8. 4096C3 [System.pas][System][TObject.NewInstance$qqrv][15641]
  9. 409E06 [System.pas][System][@ClassCreate$qqrpvzc][16951]
  10. 119816E [MonthDeposit.pas][MonthDeposit][TDepositState.$bctr$qqrxp42Jstvirtualstringtree.TjstVirtualStringTreexp28Vcl.Actnctrls.TActionToolBarxp26Vcl.Actnman.TActionManagerp19Vcl.Stdctrls.TLabel][230]
  11. 119B0B5 [System.Generics.Collections.pas][MonthDeposit][Generics.Collections.%TList__1$p23Monthdeposit.TDeposit01%.Add$qqrxp23Monthdeposit.TDeposit01][919]
  12. 1198BAE [MonthDeposit.pas][MonthDeposit][TDepositState.FilllstDeposit$qqrv][338]
  13. 1233901 [subDebit.pas][subDebit][TfrmsubDebit.CreateAsSubform$qqrxp24Jstadvpanel.TjstAdvPanel][732]
  14. 122E1F2 [DepositDefrayalSingly.pas][DepositDefrayalSingly][TfrmDepositDefrayalSingly.CreateObjects$qqrv][225]
  15. 103EF21 [BasalForm.pas][BasalForm][TBasalForm.SetForm$qqrv][41]
  16. 122E22E [DepositDefrayalSingly.pas][DepositDefrayalSingly][TfrmDepositDefrayalSingly.SetForm$qqrv][234]
  17. 103EF5D [BasalForm.pas][BasalForm][TBasalForm.$bctr$qqrv][48]
  18. .
  19. The block was previously used for an object of class: TDeposit01
  20. The allocation number was: 388976
  21. .
  22. The block was previously freed by thread 0x26DC, and the stack trace (return addresses) at the time was:
  23. 406D12 [System.pas][System][@FreeMem$qqrpv][4439]
  24. 4096E1 [System.pas][System][TObject.FreeInstance$qqrv][15650]
  25. 409E51 [System.pas][System][@ClassDestroy$qqrxp14System.TObject][16993]
  26. 11983DD [MonthDeposit.pas][MonthDeposit][TDepositState.$bdtr$qqrv][268]
  27. 4097E7 [System.pas][System][TObject.Free$qqrv][15718]
  28. 119C124 [System.Generics.Collections.pas][MonthDeposit][Generics.Collections.%TObjectList__1$p23Monthdeposit.TDeposit01%.Notify$qqrxp23Monthdeposit.TDeposit0151System.Generics.Collections.TCollectionNotification][2193]
  29. 119B91B [System.Generics.Collections.pas][MonthDeposit][Generics.Collections.%TList__1$p23Monthdeposit.TDeposit01%.DeleteRange$qqrii][1127]
  30. 77B7E20E [SystemParametersInfoW]
  31. 68043B [Vcl.Forms.pas][Vcl.Forms][AlignWork][8738]
  32. 119AAB0 [System.Generics.Collections.pas][MonthDeposit][Generics.Collections.%TList__1$p23Monthdeposit.TDeposit01%.SetCount$qqri][749]
  33. 119BBA5 [System.Generics.Collections.pas][MonthDeposit][Generics.Collections.%TList__1$p23Monthdeposit.TDeposit01%.Clear$qqrv][1132]
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:FastMM detected that a block has been modified after being freed
« Odpověď #1 kdy: 16-11-2019, 19:58:17 »
Len dodatok. Pokiaľ som nemal vytvorené vnorené podformuláre, tak mi to fungovalo. Technológia ostala v podstate zachovaná. Len bola upravená/prispôsobená na nový stav.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2391
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:FastMM detected that a block has been modified after being freed
« Odpověď #2 kdy: 16-11-2019, 20:40:16 »
No a co chces vedet? Uvolnujes to 2x, poprve viz. radek 22.
Embarcadero MVP - Czech republic

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2611
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:FastMM detected that a block has been modified after being freed
« Odpověď #3 kdy: 16-11-2019, 20:52:27 »
Len dodatok. Pokiaľ som nemal vytvorené vnorené podformuláre, tak mi to fungovalo. Technológia ostala v podstate zachovaná. Len bola upravená/prispôsobená na nový stav.
Mas tam totalni hokej ve sprave zivotniho cyklu objektu -> je to jen ta nedavno resena AV v blede modrem. Ale jak jsi ho dokazal vytvorit, tezko soudit. Podle stack-trace se to toci kolem nejakeho generickeho seznamu MonthDeposit, tak si dej na jeho metody Clear/Destroy apod. bkpt a pak trasuj z tech metod ven, abys zjistil, odkud to vsude volas ev. mas jeste nejake polozky z toho seznamu nekde zapamatovane jako dangling pointery a sahas na ne po te, co je uvolnil uz ten genericky seznam.

Ale vubec mi do hlavy neleze, o co se tam vlastne snazis nejakym vyclenovanim instanci trid do unit aj. viz predchozi tvoje dotazy...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:FastMM detected that a block has been modified after being freed
« Odpověď #4 kdy: 16-11-2019, 21:00:05 »
Problém je v tom, že si nie som vedomý toho uvoľnenia. Tie objekty mám v zozname a pracujem len s tým zoznamom. Vytváram a ničím ho naraz! Nič jednotlivo.
Citace
Ale vubec mi do hlavy neleze, o co se tam vlastne snazis nejakym vyclenovanim instanci trid do unit aj. viz predchozi tvoje dotazy...
Aby som mal hlúpe formuláre. Viď Daniel Andraščík.
Citace
ak si dej na jeho metody Clear/Destroy apod. bkpt a pak trasuj z tech metod ven, abys zjistil, odkud to vsude volas ev. mas jeste nejake polozky z toho seznamu nekde zapamatovane jako dangling pointery a sahas na ne po te, co je uvolnil uz ten genericky seznam.
Ja ten zoznam uvoľňujem (jeho položky) jedine pri uzatvorení formulára. A už do nich určite nesiaham. To trasovanie do Clear môžem skúsiť.
Ale prečo to je len pri naplnených VST je mi obrovskou záhadou.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:FastMM detected that a block has been modified after being freed
« Odpověď #5 kdy: 16-11-2019, 21:15:58 »
Tie chyby mi vyskočia až pri zatváraní okna aplikácie. To tu už raz bolo.
Je to pri FinalizeUnits; Idem si pozrieť svoj starší príspevok, kde som mal presne takú istú chybu.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:FastMM detected that a block has been modified after being freed
« Odpověď #6 kdy: 16-11-2019, 21:32:22 »
Ešte doplním, že ak neuvoľním položky zoznamu, tak vypíše memory leak. Sú tam všetky objekty ktoré vytváram. Nezistil som, žeby tam niečo chýbalo = uvoľňujem to niekde inde. Ale daná chyba sa neukáže.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:FastMM detected that a block has been modified after being freed
« Odpověď #7 kdy: 16-11-2019, 22:40:25 »
Tak to ma už nebaví. Hodil som všetko do jednej jednotky (formulára) a odrazu mi hlási AV pri takejto "banálnej" veci:
Kód: Delphi [Vybrat]
  1.   FlstDeposit := TObjectList<TDeposit01>.Create(True);
Všetko je tak, ako to bolo v samostatnej jednotke. Ja sa na to môžem... hm neviem nájsť správneho "smajlíka" ;D
Triedy som dal až za definíciu formulára, nakoľko s formulárom pracujem v triedach.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:FastMM detected that a block has been modified after being freed
« Odpověď #8 kdy: 16-11-2019, 22:45:57 »
Už som to dal do poriadku. Ale pôvodná chyba ostala. :'( :'( :'( :'( :'(  A už aj bež do postele!
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:FastMM detected that a block has been modified after being freed
« Odpověď #9 kdy: 16-11-2019, 23:11:30 »
Použil som vo FormDestroy
Kód: Delphi [Vybrat]
  1.   for I := 0 to ManuallyDepositState.lstDeposit.Count - 1 do
  2.     ManuallyDepositState.lstDeposit[I].Vst.Clear;
a problém zmizol. Asi to má súvislosť s Vst.FreeNode
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.