Autor Téma: V jednom prípade mi aplikácia ukončuje s AV  (Přečteno 3473 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
V jednom prípade mi aplikácia ukončuje s AV
« kdy: 21-10-2019, 19:39:01 »
Vidím, že sa posúvam na vyššiu úroveň ;D Vyskakujú mi naozaj zaujímavé problémy. Opäť je to len v jednom prípade(tabuľke?).
Popis problému:
Dám edit/insert záznam. Zruším to, alebo zmeny uložím (okrem insert). Formulár sa uzatvorí bez problémov. Aplikácia s AV FastMM už nič nezachytí. AV vyskočí v:
Kód: Delphi [Vybrat]
  1. System
  2.  
  3.  
  4. procedure FinalizeUnits;
  5. var
  6.   Count: Integer;
  7.   Table: PUnitEntryTable;
  8.   P: Pointer;
  9. begin
  10.   if InitContext.InitTable = nil then
  11.     exit;
  12.   Count := InitContext.InitCount;
  13.   Table := InitContext.InitTable^.UnitInfo;
  14. {$IFDEF LINUX}
  15.   Inc(PByte(Table), InitContext.Module^.GOT);
  16. {$ENDIF}
  17.   try
  18.     while Count > 0 do  //  Tu


Pritom používam iba štandardný postup, ktorý je vlastne všade. Pre istotu som vymenil TFDTable. Bez zmeny.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #1 kdy: 21-10-2019, 20:06:50 »
Na tomto riadku
Kód: Delphi [Vybrat]
  1. Table := InitContext.InitTable^.UnitInfo;
pri nabehnutí myšou na InitTable mi vypíše jednotku, ktorú som v tomto prípade vôbec nepoužil.
Netuším či to je nejaká stopa.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2402
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #2 kdy: 21-10-2019, 21:32:51 »
Na tomto riadku
Kód: Delphi [Vybrat]
  1. Table := InitContext.InitTable^.UnitInfo;
pri nabehnutí myšou na InitTable mi vypíše jednotku, ktorú som v tomto prípade vôbec nepoužil.
Netuším či to je nejaká stopa.


FinalizeUnit provádí volání sekce finalization z použitých jednotek. Co je to za jednotku? Má sekci finalization ?
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #3 kdy: 21-10-2019, 21:41:42 »

Kód: Delphi [Vybrat]
  1. Co je to za jednotku?
To je jednotka k podformuláru. Mám to tak vo všetkých prípadoch. Mám tam definované triedy používané v podformulári. Aby boli formuláre a podformuláre čo najjednoduchšie.
Kód: Delphi [Vybrat]
  1. Má sekci finalization ?
Nemá. To nikde nepoužívam. Bolo mi tu vysvetlené, že sa initialization a finalization používajú v zvláštnych prípadoch. A to nie je môj prípad. Pre istotu som to okamžite skontroloval.
.
Nerozumiem ako môže vyvolanie Table.Edit vyvolať také správanie.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2402
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #4 kdy: 21-10-2019, 22:17:03 »

Nerozumiem ako môže vyvolanie Table.Edit vyvolať také správanie.

Jsi si jist, ze je to tim? Zkus ubirat a pak pridavat puvodni radky zda se to projevi. Zkus Table.Edit a Table.Post, zda se to projevi.
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #5 kdy: 22-10-2019, 08:26:52 »
Samozrejme, že si nie som istý. Ale nič iné nerobím. Či použijem Cancel alebo Post je jedno. To isté je aj pri Insert + Cancel. Post som neskúšal. Podľa by to bolo zbytočné.
Obsah jednotky uDepositCreate som skopíroval do PSPad-u a späť, aby som mal istotu, že to je čisté. Bez zmeny.
Citace
Zkus ubirat a pak pridavat puvodni radky zda se to projevi.
To myslíš ktoré?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #6 kdy: 22-10-2019, 08:55:13 »
V jednotke uDepositCreate som zakomentoval čo sa dalo. Problematických častiach ako sa dalo. V momente keď zavolám Table.Edit je problém.
Ešte včera som celú DB zálohoval (full) a obnovil. Do samotnej tabuľky sa mi dvakrát nechce púšťať. Viď príspevok nižšie.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #7 kdy: 22-10-2019, 09:16:08 »
Kód: Delphi [Vybrat]
  1. procedure TCustomDB.EditRecord;
  2. begin
  3.   FTable.Edit;
  4.   oGlobalVar.ChangeDBIsAllowed := True;
  5. .
  6.   if Assigned(oGlobalVar.ActualObject.Navigator) then
  7.     oGlobalVar.ActualObject.Navigator.ActiveChanged;
  8. end;
  9. .
  10. procedure TCustomDB.CancelRecord;
  11. begin
  12.   FTable.Cancel;
  13. .
  14.   if Assigned(oGlobalVar.ActualObject.Navigator) then
  15.     oGlobalVar.ActualObject.Navigator.ActiveChanged;
  16. end;
To je všetok kód, ktorý sa vykoná. Je to mimo volajúceho objektu, ktorý však obsahuje TCustomDB.
Tie bodky sú len kvôli formátovaniu. Bez nich mi tam nahodí dva prázdne riadky, čo ma serie.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2402
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #8 kdy: 22-10-2019, 09:43:44 »

  if Assigned(oGlobalVar.ActualObject.Navigator) then
    oGlobalVar.ActualObject.Navigator.ActiveChanged;
....

Á globalni promenne, pokud je zapoznamkujes tak co?
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #9 kdy: 22-10-2019, 09:52:32 »

Citace
Á globalni promenne, pokud je zapoznamkujes tak co?
Program prestane byť funkčný ;D  V tom chybu teda naozaj neočakávam.Tá citovaná funkcia je len nastavenie DBNavigator (Action.Enabled) a to je dobre. Teraz mi napadlo dať na formulár tlačidlo pre zrušenie editácie. Tak tú funkciu môžem. Vypnúť.
Vytiahol som staršiu verziu DB. Takže v DB problém nie je.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #10 kdy: 22-10-2019, 09:56:12 »
Tak si to trafil 8)  Predsa mám chybu v tom navigátore. A ako dlho ho už používam :o  Predpokladám tvrdý boj.
Ďakujem za nasmerovanie.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2402
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #11 kdy: 22-10-2019, 12:34:50 »
No ty delas  if Assigned(oGlobalVar.ActualObject.Navigator), ale
uz si nejsi jist ze oGlobalVar nebo oGlobalVar.ActualObject je spravne. Tipl bych to na problem s tim druhym, ze uz byl uvolnen, nebo je nil.

Zkusil jsi FastMM ve fulldebug mode? Viz muj  pres 8 let stary clanek / to to leti - https://delphi.cz/post/FastMM4-a-detekce-prepisu-pameti.aspx

Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #12 kdy: 22-10-2019, 13:06:54 »
Totálne tomu nerozumiem. Mám nasledovné:
Kód: Delphi [Vybrat]
  1. procedure TfrmsubEntry.btnCancelClick(Sender: TObject);
  2. begin
  3.   oEntry.CancelRecord;  //  OK
  4. end;
  5. .
  6. procedure TfrmsubEntry.actCancelExecute(Sender: TObject);
  7. begin
  8.   oEntry.CancelRecord;  //  AV
  9. end;
Krokoval som to riadok po riadku. Samozrejme, že to je totožné.
Ja pre to nenachádzam žiadne vysvetlenie.
Citace
uz si nejsi jist ze oGlobalVar nebo oGlobalVar.ActualObject je spravne. Tipl bych to na problem s tim druhym, ze uz byl uvolnen, nebo je nil.
ActualObject je správny. Overoval som to. Objekty sa uvoľňujú jedine pri uzatvorení formulára. Pozriem sa na to. A to s editáciou nemá nič spoločné.
Citace
Zkusil jsi FastMM ve fulldebug mode?
Mám ho takto vždy!
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #13 kdy: 22-10-2019, 13:20:08 »
Objekty mám v zozname TObjectList<T>(owners True) a uvoľňujem ich pomocou Clear.
Robím tie isté akcie, spustí sa totožný kód a pri ukončení aplikácii je to raz OK druhýkrát AV :o :o ::) ::) ::)
Problém mám hlavne s tým, že nikde nevidím rozdiel v činnosti programu. Žiaden! Okrem miesta spustenia oEntry.CancelRecord.
Štve ma to a chce to vyriešiť >:( >:(
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #14 kdy: 22-10-2019, 13:51:10 »
Urobil som pokus
Kód: Delphi [Vybrat]
  1. procedure TfrmsubEntry.actCancelExecute(Sender: TObject);
  2. begin
  3. //  oEntry.CancelRecord;
  4. btnCancel.OnClick(btnCancel);
  5. end;
A mám AV. ActionManager som vymenil a všetky act... som najprv zrušil a vytvoril odznova.
Dá sa pri tom ešte niečo urobiť/zmeniť/vymeniť?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #15 kdy: 22-10-2019, 13:53:28 »
Samotný podformulár je jednoduchý.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 836
  • Karma: 45
    • Verze Delphi: 10.3
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #16 kdy: 22-10-2019, 13:55:13 »
Problém může vznikat i na úplně jiném místě - třeba někde jinde alokuješ paměť, ale zapíšeš do ní víc, než se vejde. Nebo nemáš inicializovaný nějaký pointer či objekt a zapisuješ do paměti, na kterou odkazuje.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2402
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #17 kdy: 22-10-2019, 14:10:46 »
Totálne tomu nerozumiem. Mám nasledovné:
Kód: Delphi [Vybrat]
  1. procedure TfrmsubEntry.btnCancelClick(Sender: TObject);
  2. begin
  3.   oEntry.CancelRecord;  //  OK
  4. end;
  5. .
  6. procedure TfrmsubEntry.actCancelExecute(Sender: TObject);
  7. begin
  8.   oEntry.CancelRecord;  //  AV
  9. end;
Krokoval som to riadok po riadku. Samozrejme, že to je totožné.
Ja pre to nenachádzam žiadne vysvetlenie.
Citace
uz si nejsi jist ze oGlobalVar nebo oGlobalVar.ActualObject je spravne. Tipl bych to na problem s tim druhym, ze uz byl uvolnen, nebo je nil.
ActualObject je správny. Overoval som to. Objekty sa uvoľňujú jedine pri uzatvorení formulára. Pozriem sa na to. A to s editáciou nemá nič spoločné.
Citace
Zkusil jsi FastMM ve fulldebug mode?
Mám ho takto vždy!

A zkusil jsi zda ti FastMM detekuje dvojite uvolneni atd?, tj. treba
var
  lst: TStringList;
begin
  lst := TStringList.Create;
  lst.Free;
  lst.Free; // <- tady ti to musi odchytnout
end;


Jinak co je oEntry a kde se uvolnuje?
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2402
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #18 kdy: 22-10-2019, 14:11:43 »
Jinak co je oEntry a kde se uvolnuje?
A mas nastaveno use debug dcu? Jaky je call stack v pripade vyjimky s use debug dcu?
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #19 kdy: 22-10-2019, 14:56:16 »
Problém může vznikat i na úplně jiném místě - třeba někde jinde alokuješ paměť, ale zapíšeš do ní víc, než se vejde. Nebo nemáš inicializovaný nějaký pointer či objekt a zapisuješ do paměti, na kterou odkazuje.
Ja také "ťažké" techniky nepoužívam.
Citace
A mas nastaveno use debug dcu? Jaky je call stack v pripade vyjimky s use debug dcu?
Mám. Žiaden výpis sa mi nezobrazí. Keď dám pokračovať tak sa program ukončí. Pri Brek skočí do jednotky System.
Project JasotSVB.exe raised exception class $C0000005 with message 'access violation at 0x77912163: read of address 0xfeeefefa'.
Citace
A zkusil jsi zda ti FastMM detekuje dvojite uvolneni atd?, tj. treba
To nie.
oEntry je objekt v podstate ako každý iný. Uvoľňuje sa v tom zozname TObjectlist<T>. V tomto prípade ich tam je 14.

Opakujem sa: vykonaný kód je totožný. Myslím tým aj vo vzťahu k iným objektom. Nachádza sa totiž mimo objektu. V predkoch, TCustomDB a v Navigators.
Jediné čo rozhoduje o AV je miesto volania oEnter.CancelRecord. Z ActionManager AV, z tlačidla OK. V ostatných skúšaných objektoch sa to nestane.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2623
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #20 kdy: 22-10-2019, 20:33:24 »
Nerozumiem ako môže vyvolanie Table.Edit vyvolať také správanie.
Ale to je jen dusledek chyby, kdy aplikace po sobe zameta a vola Finalization sekci v kazde unit, ktera ji ma a v aplikaci se vyskytuje bez ohledu na to, jestli je tvoje nebo ne.
To je jen indukovana chyba.

IMHO nejjednoduzsi bude dat bkpt do FinalizeUnits na radek
Kód: Delphi [Vybrat]
  1. TProc(P)();
a kazde do kazdeho volani vtrasovat (F7) tak dlouho, nez narazis na unit, ve ktere to spadne. Casto to nezachytis tak, abys vedel pri cem, takze dalsi bkpt do te unit, ve ktere to spadlo a dalsi pokus dotrasovat se priciny atd. Pri trose stesti se to rozsviti, co mas spatne, az uvidis, po cem to saha.

Rekl bych, ze pricinou bude neporadek v zivotnim cyklu nejakeho objektu a ze sahas po necem, co v te dobe je uz uvolnene a zbyl ti nekde dangling pointer. A FastMM to nechyti, protoze to FinalizeUnits se vola skoro az na same konci exitu v Halt nebo tak odnekud.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2402
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #21 kdy: 22-10-2019, 21:25:02 »
A FastMM to nechyti, protoze to FinalizeUnits se vola skoro az na same konci exitu v Halt nebo tak odnekud.

Dovolil bych si nesouhlasit. FastMM ma byt jako prvni jednotka v dpr, takze jeji finalization (kde se kontroluji leaky atd.) je tim padem jako posledni volana (pravdepodobne krome system.pas). Finalization sekce jsou volany v obracenem poradi.
 Navic dvojite uvolneni atd. se kontroluje v prubehu behu programu.
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2402
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #22 kdy: 22-10-2019, 21:26:50 »
Opakujem sa: vykonaný kód je totožný.
Evidentne neni, jinak by to nespadlo. Tak bud chces poradit, nebo ne.
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #23 kdy: 22-10-2019, 21:37:48 »
Citace
Evidentne neni, jinak by to nespadlo. Tak bud chces poradit, nebo ne.
Keby som nechcel radu, tak sa nepýtam. Ja tu píšem o svojom kóde. A vo formulári som žiaden rozdiel nezistil.
Citace
IMHO nejjednoduzsi bude dat bkpt do FinalizeUnits na radek
Skončil som na Out of memory. V PC bolo obsadených 68% a Delphi 700MB.
Skúsim to ešte raz.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #24 kdy: 22-10-2019, 21:56:15 »
Dopracoval som sa k tomu a potom
Kód: Delphi [Vybrat]
  1. procedure DoneControls;
  2.  
  3. begin
  4.   FreeAndNil(FlagControl);
  5.   Application.Free;  //  Tu mi to padne
« Poslední změna: 22-10-2019, 22:00:43 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #25 kdy: 22-10-2019, 22:06:25 »
Pokračovanie:
Kód: Delphi [Vybrat]
  1. destructor TApplication.Destroy;
  2.     DestroyWindow(FHandle);  //  Tu bolo číslo, ale z neho nezistím nič.
  3. function DestroyWindow; external user32 name 'DestroyWindow';
Tu som definitívne skončil.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 836
  • Karma: 45
    • Verze Delphi: 10.3
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #26 kdy: 22-10-2019, 22:19:35 »
Stejně mi připadá pravděpodobnější, že chyba jako taková je někde úplně jinde (a spíš v aplikaci než ve VCL).
Třeba něco jako:
Kód: Delphi [Vybrat]
  1. btn1:=tButton.Create...
  2. btn2:=btn1;
  3. FreeAndNil(btn1);
  4. btn2.něco; // pravděpodobně AV


Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #27 kdy: 22-10-2019, 22:20:14 »
Presnejšie je koniec tu po druhom prechode
Kód: Delphi [Vybrat]
  1. System.Classes
  2. { Standard window procedure }
  3. function StdWndProc(Window: HWND; Message: UINT; WParam: WPARAM; LParam: WPARAM): LRESULT; stdcall;
  4. {$IF Defined(CPUX86)}
  5. { In    ECX = Address of method pointer }
  6. { Out   EAX = Result }
  7. asm
  8.         XOR     EAX,EAX
  9.         PUSH    EAX
  10.         PUSH    LParam
  11.         PUSH    WParam
  12.         PUSH    Message
  13.         MOV     EDX,ESP
  14.         MOV     EAX,[ECX].Longint[4]
  15.         CALL    [ECX].Pointer
  16.         ADD     ESP,12
  17.         POP     EAX
  18. end;
  19. {$ELSEIF Defined(CPUX64)}
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #28 kdy: 22-10-2019, 22:25:11 »
Citace
Stejně mi připadá pravděpodobnější, že chyba jako taková je někde úplně jinde (a spíš v aplikaci než ve VCL).
To si myslím aj ja. Lenže :'( :'( :'(
Keby som mal Tebou uvedený príklad, tak by mi to muselo padnúť stále (a aj inde). Ja FreeAndNil používam v Destroy a samozrejme vo funkciách. Ale tam takmer vždy až na konci. A aj to na 99% v try...finaly
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 836
  • Karma: 45
    • Verze Delphi: 10.3
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #29 kdy: 22-10-2019, 22:30:55 »
Právě že to v takových případech nemusí padat vždycky - v závislosti na tom, co se zavolá a co se mezitím dělo v paměti.

Dnes jsem zrovna řešil chybu zavlečenou ještě z dávných verzí - pole záznamů, uvnitř záznamu string (dřív tam bylo string[5]). Položky v poli se posouvaly pomocí move - a to je problém, protože položky "přeplácnuté" novými záznamy neuvolnily ty stringy a naopak stringy z původní a z nové pozice měly špatně čítač referencí, takže pak při zápisu do původní položky už string v nové položce ukazoval vlastně na neplatnou paměť.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #30 kdy: 22-10-2019, 22:56:14 »
Tak som si tie FreeAndNil skontroloval a nič som nenašiel. Tebou uvedený typ príkladu tu určite nemám. Žiadnu takú techniku tu nepoužívam.
Mňa stále vytáča spôsob ako sa k AV dostanem. Vždy bez výnimky rovnako.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2623
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #31 kdy: 23-10-2019, 07:46:50 »
Dovolil bych si nesouhlasit. FastMM ma byt jako prvni jednotka v dpr,
Jj, s tim souhlasim. Ale setkal jsem se nekolikrat s chybami, ktere FastMM nechytal. Rekl bych, ze to bylo v pripadech, kdy finalization zaviralo/likvidovalo i jine prostredky nez ciste pamet jako nejaka spojeni apod. A mam dojem, ze neco podobneho jsem nekdy s nekym na foru resil, ale HOSIP

Citace
Navic dvojite uvolneni atd. se kontroluje v prubehu behu programu.
No je prave otazka, jestli i v pripade, kdy to poprve uvolnis za behu aplikace a podruhe pres dangling pointer ve finalize...

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2623
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #32 kdy: 23-10-2019, 07:58:10 »
function StdWndProc(Window: HWND; Message: UINT; WParam: WPARAM; LParam: WPARAM): LRESULT; stdcall;
...
{ In    ECX = Address of method pointer }
...
        MOV     EAX,[ECX].Longint[4]
        CALL    [ECX].Pointer
Jestli je tvoje informace presna, tak to ukazuje, ze se to snazi propagovat wokenni message do "okna", ktere uz neexistuje, coz by ukazovalo na to, ze se nekdo neco zrusi, ale v pumpe zprav pro to zustanou nejake nedorucene zpravy. Nerusi nejaky form sam sebe pomoci Free?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #33 kdy: 23-10-2019, 09:24:27 »

Citace
Nerusi nejaky form sam sebe pomoci Free?
Ak myslíš
Kód: Delphi [Vybrat]
  1. procedure TfrmFOC.FormClose(Sender: TObject; var Action: TCloseAction);
  2. begin
  3.   oGlobalVar.AdaptRibbon.DoAdaptActions;
  4.   Action := caFree;
  5. end;
tak áno. Okrem pár výnimiek všade. Všetky som vyhodil. Nedostanem AV, ale debuger ostane visieť na
Kód: Delphi [Vybrat]
  1. Module Load: imagehlp.dll. No Debug Info. Base Address: $75E80000. Process JasotSVB.exe (2016)
  2. Module Load: dbghelp.dll. No Debug Info. Base Address: $74FA0000. Process JasotSVB.exe (2016)
a môžem urobiť jedine reset (Ctrl+F2)
Práve som dostal oznam Memory Leak Dected. Preto som nemohol ukončiť aplikáciu. Možno z toho niečo zistím. Aspoň sa je konečne čoho chytiť. Dávam to do prílohy
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #34 kdy: 23-10-2019, 09:36:47 »
FastMM mi vygeneroval 260 MB súbor ;D
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2402
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #35 kdy: 23-10-2019, 10:42:25 »
FastMM mi vygeneroval 260 MB súbor ;D

Tak ho zipni a dej treba na letecka posta nebo tak.
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #36 kdy: 23-10-2019, 12:16:37 »
Citace
Tak ho zipni a dej treba na letecka posta nebo tak.
V tomto štádiu to je úplne zbytočné. Stačí príloha v príspevku vyššie.
Ešte som to ani neanalyzoval. To idem urobiť teraz.
No mám jednu otázku:
Vo výpise sa objavujú všetky podformuláre. Tie vytváram vo formulári a inštancie ukladám do "vlastných" premenných. Uvoľňujem ich vo FormDestroy. Je to to správne miesto? Podľa helpu áno. Nie je vhodnejšie to dať do FormClose?
Kód: Delphi [Vybrat]
  1. type
  2. ...
  3.   strict private/public
  4.     sbfBuildingType: TfrmsubBuildingType;
  5.  
  6.  
  7. procedure TfrmFOC.CreateObjects;
  8.   sbfBuildingType := TfrmsubBuildingType.CreateAsSubform(jstpnlBuildingType);
  9.  
  10.  
  11. procedure TfrmFOC.FormDestroy(Sender: TObject);
  12. begin
  13.   FreeAndNil(sbfBuildingType);
  14.  
  15.  
  16. class function TfrmsubBuildingType.CreateAsSubform(const AParentPanel: TjstAdvPanel): TfrmsubBuildingType;
  17. begin
  18.   Result := TfrmsubBuildingType.CreateForm;
  19.   oBuildingType := TBuildingType.CreateForm(Result, Result.fdtblBuildingType, AParentPanel, Result.jstpnlBuildingTypeEdit);
  20.   oGlobalVar.AddObjects(oBuildingType);
  21.   Result.Show;
  22. end;

Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Online vandrovnik

  • Guru
  • *****
  • Příspěvků: 836
  • Karma: 45
    • Verze Delphi: 10.3
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #37 kdy: 23-10-2019, 12:18:23 »
No a nedopadne to náhodou tak, že je uvolníš jednou Ty a podruhé nějaký ten panel nebo formulář, pod které je zařadíš?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #38 kdy: 23-10-2019, 12:28:12 »
Už mi v náznaku začalo niečo také vŕtať v hlave. Idem na to.
V konečnom dôsledku je výsledok ten istý. Ale FastMM vygeneroval 440 MB.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #39 kdy: 23-10-2019, 12:41:55 »
Citace
Ale FastMM vygeneroval 440 MB.
Beriem späť. Nakopíroval som si nový konfiguračný súbor a nenastavil som vyčistenie log súboru. Teraz to je 107. Menej ako polovica.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #40 kdy: 23-10-2019, 12:46:52 »
Koniec výpisu:
*********
1 - 4 bytes: Unknown x 4
5 - 12 bytes: TGlyphCache x 1, TMoveArrayManager<AdvEdit.TAdvEdit> x 1, TGlyphCache x 1, TMoveArrayManager<PatternFlat.TPatternFlatRoom> x 5, TParaAttributes x 4, TMoveArrayManager<Room.TFlatRoom> x 5, TMoveArrayManager<Data.DB.TDataLink> x 17, TMoveArrayManager<System.IInterface> x 24, TObject x 25, TMoveArrayManager<Data.DB.TDataSource> x 24, TMoveArrayManager<Data.DB.TField> x 74, TMoveArrayManager<System.Classes.TBasicActionLink> x 154, TMoveArrayManager<System.Actions.TContainedAction> x 14, TMoveArrayManager<Data.DB.TDataSet> x 20, TMoveArrayManager<System.Classes.TComponent> x 860, TMoveArrayManager<System.Classes.TCollectionItem> x 330, TMoveArrayManager<System.string> x 62, TMoveArrayManager<System.Variant> x 106, TMoveArrayManager<System.Integer> x 106, Unknown x 1092
13 - 20 bytes: TDbgList x 3, TThreadList x 1, TBits x 4, TAutoCorrect x 4, TIntList x 12, TCharStyle x 4, TTextAttributes x 8, TObservers x 107, TFDRefCounter x 72, TFDBuffer x 48, TFDEncoder x 24, TThreadList<System.IInterface> x 24, TFieldOptions x 24, TAutoSize x 102, THTMLPictureCache x 124, TList x 2409, TChangeLink x 358, TFDColMapItem x 144, UnicodeString x 228, Unknown x 759
21 - 36 bytes: TPagerTabScroller x 1, TGradientBackground x 12, TList<PatternFlat.TPatternFlatRoom> x 5, TPatternFlatRoom x 50, TCodeFolding x 4, TAdvUndoList x 4, TAdvActiveLineSettings x 4, TMemoLines x 4, TAdvMarkers x 4, TAdvMarkerList x 4, TDBGridLookupDataLink x 4, TDBColumnCollection x 4, TPersistence x 3, TDisjunctDateTimeItem x 6, TDisjunctDateTimeArray x 6, TPersistence x 6, TList<Room.TFlatRoom> x 5, TImageMargins x 100, TFlatRoom x 50, TComponent.GetObservers$942$ActRec x 107, TIconImage x 22, TStringTreeOptions x 14, TVTFixedAreaConstraints x 14, TScrollBarOptions x 14, TList<System.Actions.TContainedAction> x 14, TPersistence x 185, TPanelPosition x 102, TAdvHintInfo x 216, TMemoryStream x 733, TFDMapRules x 24, TFDDAptColumnMappings x 24, TFDDatSUpdatesJournal x 24, TList<System.IInterface> x 24, TInterfaceList x 24, TFDAggregates x 48, TFDIndexes x 24, TCheckConstraints x 24, TList<Data.DB.TDataSource> x 24, TList<Data.DB.TField> x 74, TFields x 48, TList<System.Classes.TBasicActionLink> x 154, TPadding x 1072, TList<Data.DB.TDataSet> x 20, TTouchManager x 1353, TSizeConstraints x 1353, TMargins x 1353, TList<Data.DB.TDataLink> x 17, TActionClientLink x 274, TButtonProperties x 274, TList<System.Classes.TCollectionItem> x 330, TList<System.Classes.TComponent> x 860, TPen x 1298, TBrush x 2370, TList<System.Integer> x 106, TList<System.string> x 62, TList<System.Variant> x 106, UnicodeString x 1728, Unknown x 2406
37 - 52 bytes: TObjectList<AdvEdit.TAdvEdit> x 1, TVistaBackground x 12, TTabProgress x 11, TUILanguage x 4, TPrintOptions x 4, TDBGridDataLink x 4, TMemoStrings x 4, TGDIPStatus x 12, TAdvSmoothCalendarDateWeekNumbers x 12, TLookupSettings x 6, TComboBoxStrings x 103, TDictionary<System.Integer,System.Classes.IInterfaceList> x 107, TGroupBoxCheck x 12, TListBoxStrings x 191, TGlassFrame x 22, TFieldDef x 144, TFDParams x 24, TFDMacros x 24, TFDDatSTableList x 24, TFDDatSRelationList x 24, TPicture x 14, TActionBars x 28, TActionClients x 30, TFont x 3589, TVTDragManager x 13, UnicodeString x 670, Unknown x 250
53 - 68 bytes: TPagerTabSettings x 1, TRichEditStrings x 4, TSplitterAppearance x 3, TAdvSmoothCalendarFooter x 12, TAdvSmoothCalendarHeader x 12, TAdvDBComboBoxStrings x 4, TButtonGlyph x 100, TFDBottomResourceOptions x 24, TFDFetchOptions x 24, TFDOptionsContainer x 24, TIndexDefs x 24, TFieldDefs x 24, TVTDragImage x 28, TActionBarItem x 30, TLookupSettings x 185, TPanelStatusBar x 102, TBitmap x 933, TIcon x 22, TAdvImage x 102, TFDIndex x 57, UnicodeString x 316, Unknown x 178
69 - 84 bytes: TWorkerThread x 1, TAdvStylerList x 4, TAutoCompletion x 4, TAdvSmoothDatePickerCalendar x 6, TDBColumnItem x 5, TButtonGlyph x 46, TVTColors x 14, TVirtualTreeColumns x 14, TFieldDataLink x 81, TControlScrollBar x 44, TFDBottomUpdateOptions x 24, TFDFormatOptions x 24, TFDDatSManager x 24, TFDParam x 12, UnicodeString x 98, Unknown x 152
85 - 100 bytes: TCustomAdvOfficePagerStyler x 1, TAdvGutter x 4, TTimer x 21, TAdvGDIPPicture x 336, TCanvas x 100, TFDStringList x 96, TFDMasterDataLink x 24, TFieldList x 24, TFieldDefList x 24, TClipboardFormats x 14, TGDIPPicture x 249, TStringList x 636, UnicodeString x 14, Unknown x 1
101 - 116 bytes: TAdvSmoothCalendarDateAppearance x 12, TDataSource x 17, TFDDAptTableAdapter x 24, TControlCanvas x 1003, TBitmapCanvas x 195, UnicodeString x 4, Unknown x 6
117 - 132 bytes: TPageButtonSettings x 1, TAdvMemoStrings x 4, TActionClientItem x 274, TVirtualTreeColumn x 55, TVTHeader x 14, TBitmapImage x 428, UnicodeString x 1, Unknown x 3
133 - 148 bytes: TPopupMenu x 14, Unknown x 14
149 - 164 bytes: TGlowButtonAppearance x 1, TImageList x 4, TFDTableAdapter x 24, TThemedColorMap x 14, TPanelCaption x 102, UnicodeString x 1, Unknown x 11
165 - 180 bytes: TTabAppearance x 12, TGlyphList x 4, TAction x 154, TGDIPFill x 168, UnicodeString x 1
181 - 212 bytes: TMenuItem x 132, UnicodeString x 6, Unknown x 20
213 - 244 bytes: UnicodeString x 3, Unknown x 17
245 - 276 bytes: TDateField x 6, TSmallintField x 23, TActionManager x 14, TStringField x 56, TIntegerField x 40, UnicodeString x 2, Unknown x 8
277 - 308 bytes: TBCDField x 1, TCurrencyField x 6, TFDCommand x 24
309 - 340 bytes: UnicodeString x 1
341 - 388 bytes: UnicodeString x 5, Unknown x 1
389 - 436 bytes: UnicodeString x 1
437 - 484 bytes: TLabel x 37, TSpeedButton x 6, Unknown x 1
485 - 532 bytes: TDateLabel x 1, TLabelEx x 4, TDropGridListButton x 4, TAdvSmoothSpeedButton x 6, TAdvTimerSpeedButton x 30, TCustomAdvEditLabel x 53, TAdvLabel x 4, TThemedButtonControl x 133, Unknown x 5
533 - 596 bytes: TAdvSplitter x 3
597 - 660 bytes: Unknown x 2
661 - 740 bytes: TPagerEdit x 1, THintWindow x 4, TScrollBar x 8, TAdvSpinButton x 15, TAdvGroupBox x 10, TUpDown x 6, TSmoothEditButton x 6, TListHintWindow x 6, TPanel x 21, TListHintWindow x 185, Unknown x 1
741 - 820 bytes: TAdvOfficeRadioButton x 4, TAdvOfficeRadioGroup x 1, TAdvOfficeCheckBox x 3, TListBox x 6, TDBAdvOfficeCheckBox x 7, TAdvGroupButton x 8, TAeroButton x 100, TListBoxTab x 185, Unknown x 1
821 - 916 bytes: TAdvOfficePage x 11, TFDQuery x 8, TRichEdit x 4, TActionToolBar x 14, TDBAdvOfficeRadioGroup x 1
917 - 1012 bytes: TDropDownForm x 6, TFDTable x 16, TAdvHintForm x 4
1013 - 1124 bytes: TfrmsubBlock x 1, TfrmsubBuildingType x 1, TfrmsubOwnershipInterest x 1, TAdvDBLookupComboBox x 4, TDBAdvSpinEdit x 5, TAdvDBComboBox x 4, TAdvSpinEdit x 10, TjstAdvPanel x 96, TfrmsubRoomTitle x 1, TAdvEdit x 131, TAdvComboBox x 103, Unknown x 4
1125 - 1236 bytes: TfrmsubEntry x 1, TfrmsubFOCList x 1, TfrmsubFlat x 1, TAdvSmoothCalendar x 6, TjstDBDatePicker x 6, TfrmsubSubAccount x 1, TDBAdvEdit x 54
1237 - 1364 bytes: TfrmsubPatternFlat x 1, TfrmsubBankAccount x 1, TAdvOfficePager x 1, TfrmFOC x 1, TDBAdvSmoothDatePicker x 6
1365 - 1508 bytes: TfrmsubRoom x 1
1509 - 1668 bytes: TDBAdvMemo x 4
2245 - 2468 bytes: TjstVirtualStringTree x 14
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #41 kdy: 23-10-2019, 12:53:13 »
Citujem zo stránky, z ktorej som čerpal ako na subform - Delphi.cz
**
A zrušení obdobně pod nějakou událost (nebo se o vymetení postará parent resp. jeho owner tj. nadřízený form)  if Assigned(fFlow) then    //před tím může být volání úklidových metod subformu atp. a potom úklid na nadřízeném formuláři (např. zneviditelnění toho panelu)    FreeAndNil(fFlow); ???
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2623
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #42 kdy: 23-10-2019, 13:17:44 »
  Action := caFree;
Tim by to byt nemelo, protoze reakci na caFree je volani Release. Jestli jsi to zakomentoval, tak se temi memory leaky nezabyvej. Spis to zakomentovavej postupne, abys zjistil, ktery formular ti to AV dela (pri zakomentovani by se ti mel mistop AV objevit memory leak). A pak je to dalsi otazka zkoumani, co bude ten inkriminovany  formular zac.

BTW, to se ti zacalo objevovat az po prechodu na vnorene formulare, nebo ty jsi pouzival uz pred tim?

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2402
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #43 kdy: 23-10-2019, 13:20:28 »
...
2245 - 2468 bytes: TjstVirtualStringTree x 14
No evidentne se neuvolnuji stromy a to vim ze je pouzivas na zobrazeni dat, takze se podivej co uvolnuje

FreeAndNil(sbfBuildingType); a zda se vubec zavola.
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #44 kdy: 23-10-2019, 13:59:16 »

Citace
BTW, to se ti zacalo objevovat az po prechodu na vnorene formulare, nebo ty jsi pouzival uz pred tim?
Podformuláre používam realtívne dlho. Ale až teraz som zistil, že čosi nie je v poriadku. Predtým mi memory leak nevypisovalo! Medzitým som:
  Oddelil triedy od formulárov do samostatných jednotiek
  + iné veci (keby som si pamätal čo všetko :'( ), ktoré by na to nemali mať vplyv. Ale či naozaj :-\ ?
Kód: Delphi [Vybrat]
  1.   if Assigned(sbfBuildingType) then
  2.     FreeAndNil(sbfBuildingType);
Nevolá sa, lebo ho už uvoľnil vlastník. Ale ich obsah (komponenty) ostáva zachovaný.
Action := caFree; som na skúšku vložil do jedného formulára a nevidím žiadnu zmenu.
Otázky sú:
  • prečo sa mi obsah formulárov nezničí
  • ako to dosiahnuť, keď Action := caFree; je bez účinku
Už to mám. Action := caFree; je potrebné vložiť do formulára, ktorý vlastní podformuláre. Memory leak nie je.
Do riti, AV ostalo. To je snáď začarované.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2623
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #45 kdy: 23-10-2019, 16:06:53 »
Už to mám. Action := caFree; je potrebné vložiť do formulára, ktorý vlastní podformuláre. Memory leak nie je.
Do riti, AV ostalo. To je snáď začarované.
No ano, na caFree posle formular sam sobe interni message CM_RELEASE a nez se dostane na radu, tak by mely byt obslouzeny vsechny nevyrizene zpravy pro ten formular, pokud mu nekdo neposle odnekud jeste nejake dalsi. Tim to uvolnis a leaky nejsou.

A k tomu AV dochazi, ze se nekdo odnekud odkazuje na neco (formular?), ktery uz byl uvolnen (A k tomu uvolneni nemusi dochazet vzdycky nebo po tom uvolnenem formulari nekdo bude nekdy neco jeste chtit.

Myslim, ze budovat paralelniho spravce viziualnich widgetu neni dobry napad, ze bys to mel nechat na klasickem vlastnictvi komponenty pres Owner a pokud mozno primocary zivotni cyklus vseho, jak uz ti tu tusim Radek psal: kdo vytvari, tak uvolnuje. A pokud tam mas nejake globalni sr*cky, tak zapouzdrit jako singleton a nebo nejlepe eliminovat.


Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4575
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:V jednom prípade mi aplikácia ukončuje s AV
« Odpověď #46 kdy: 23-10-2019, 16:21:11 »
Vytvoril som celý formulár odznova a problém zmizol.
Ale aspoň som si uvedomil niektoré vzťahy/veci a vyčistil kód. Čo sa týka ničenia podformulárov.
Všetkým prispievateľom do diskusie ďakujem.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.