Autor Téma: AV pri existujúcom objekte  (Přečteno 344 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
AV pri existujúcom objekte
« kdy: 11-11-2019, 21:59:19 »

Mám vytvorené FDQuery. Ak naň ukážem kurzorom, tak mi vypíše o ňom všetko. Transaction, Connection...
Napriek tomu mi pri prístupe k nemu vyhodí AV. Tak isto mi zakričí   Assert(Assigned(FqryDepositUpdate_Pay));
Tu naozaj neviem čo a kde mám hľadať. Žeby som zas musel prerobiť formulár? To by už bolo priveľa.
.
To programovanie sa mi prestáva páčiť a začína ma pekne... >:( >:( >:(

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

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2392
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:AV pri existujúcom objekte
« Odpověď #1 kdy: 11-11-2019, 22:05:57 »
Mas zapnuto "use debug dcu"? Ukaz call stack s AV. To ze ti debugger neco ukaze, neni nejdulezitejsi, debugger diky spatne napsanemu kodu (napr. s with) muze ukazat neco jineho. Nemas tam with?
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:AV pri existujúcom objekte
« Odpověď #2 kdy: 11-11-2019, 22:35:39 »
with zásadne nepoužívam. Je to tisíckrát použitá technika. Vytvorím si (raz) FDQuery pomocou funkcie a potom ju používam. V dedení chybu nevidím.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2392
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:AV pri existujúcom objekte
« Odpověď #3 kdy: 11-11-2019, 22:41:52 »
CallStack = viz obrazek
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:AV pri existujúcom objekte
« Odpověď #4 kdy: 11-11-2019, 22:52:54 »
Ja som už mimo :)  Prvý obrázok je stav pred a druhý po AV. Pri AV vypíše Process is not accessible a všetky panely, okrem spodného, sú prázdne. V poslednom je:
First chance exception at $007D6538. Exception class $C0000005 with message 'access violation at 0x007d6538: read of address 0x000002f8'. Process JasotSVB.exe (10696)
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:AV pri existujúcom objekte
« Odpověď #5 kdy: 11-11-2019, 22:54:08 »
Zlý prvý obrázok
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2392
  • Karma: 103
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:AV pri existujúcom objekte
« Odpověď #6 kdy: 11-11-2019, 23:39:41 »
...
Prvý obrázok je stav pred a druhý po AV.
Ale mne spise zajima v okamziku AV :-), jsi si jisty, ze jsi ten FqryDepositUpdate_Pay uz neuvolnil predtim? Idealne si nastavit pri uvolnovani FqryDepositUpdate_Pay  na nil. Pouzivas vlakna?
Embarcadero MVP - Czech republic

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:AV pri existujúcom objekte
« Odpověď #7 kdy: 12-11-2019, 06:57:55 »
First chance exception at $007D6538. Exception class $C0000005 with message 'access violation at 0x007d6538: read of address 0x000002f8'. Process JasotSVB.exe (10696)

Podle te nizke adresy lezes na neco, co je nil. Bud si to nevytvorl nebo to pouzivas z vic mist a jinde sis to uvolnil.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:AV pri existujúcom objekte
« Odpověď #8 kdy: 12-11-2019, 08:40:42 »
V okamžiku AV tam je len ten oznam. Vlákna nepoužívam. Pri uvoľňovaní vždy používam FreeAndNil. FqryDepositUpdate_Pay uvoľňujem až pri uvoľňovaní objektu. Pre istotu preverím to uvoľňovanie.
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:AV pri existujúcom objekte
« Odpověď #9 kdy: 12-11-2019, 09:08:54 »
Už som to objavil. Definoval (strict private) som to v základnej triede a potom aj v potomkovi. Tým to je jasné.
.
Edit: to private je omyl. Samozrejme, že to je protected.
« Poslední změna: 12-11-2019, 09:30:48 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2611
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:AV pri existujúcom objekte
« Odpověď #10 kdy: 12-11-2019, 11:03:46 »
Excellent
Rated 1 time
Už som to objavil. Definoval (strict private) som to v základnej triede a potom aj v potomkovi. Tým to je jasné.
Mozna nadesel cas zacit psat kod ciste tak, abys po prekladu dostal 0 errors, 0 warnings a vsechny warningy vyresit i za cenu pridani jaloveho kodu, protoze nektere warningy Delphi stale nejdou. A kod vubec nespoustet, pokud nemas 0 warnings -> od toho tam ty warningy jsou a prekladac te v podstate zadarmo upozorni na spoustu neplech

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:AV pri existujúcom objekte
« Odpověď #11 kdy: 12-11-2019, 13:12:11 »
V okamžiku AV tam je len ten oznam. Vlákna nepoužívam. Pri uvoľňovaní vždy používam FreeAndNil. FqryDepositUpdate_Pay uvoľňujem až pri uvoľňovaní objektu. Pre istotu preverím to uvoľňovanie.

To je hezké, že používáš FreeAndNill, ale pokud to před použitím nekontroluješ, jestli to nil neni, tak to dopadne takhle. Tam co ti to padá ten objekt je nil. Pokud by nebyl, tak ta adresa nebude takhle nízká (ta adresa je místo objektu v paměti + offset v té třídě, pokud je nízká, tak ten objekt je nil).

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4546
  • Karma: 40
    • Verze Delphi: XE7 professional
Re:AV pri existujúcom objekte
« Odpověď #12 kdy: 12-11-2019, 13:31:58 »
Citace
Mozna nadesel cas zacit psat kod ciste tak, abys po prekladu dostal 0 errors, 0 warnings a vsechny warningy vyresit i za cenu pridani jaloveho kodu, protoze nektere warningy Delphi stale nejdou. A kod vubec nespoustet, pokud nemas 0 warnings -> od toho tam ty warningy jsou a prekladac te v podstate zadarmo upozorni na spoustu neplech
Robím to zásadne tak. V tomto prípade som nemal žiaden oznam.
Citace
To je hezké, že používáš FreeAndNill, ale pokud to před použitím nekontroluješ, jestli to nil neni, tak to dopadne takhle.
Problém bol v tom, že som nevedomky vytváral objekt dvakrát, aj keď som tvrdil niečo iné. V "root parent" i v potomkovi, v ktorom som znova definoval pole FqryDepositUpdate_Pay.
Ja mám byť o 22.00 už v posteli. Hlava už takú záťaž nezvláda. Pod 10 hodín denne pred PC asi ani nejdem.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2611
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:AV pri existujúcom objekte
« Odpověď #13 kdy: 12-11-2019, 15:03:24 »
Robím to zásadne tak. V tomto prípade som nemal žiaden oznam.
Aha, to jsem precenil Delphi. Ve VS jakmile neni member u predka (strict) private, tak na skryti clena u predka bezne upozornuje.