Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Pascal - volání metody

Ahoj, tvořím program v Pascalu a nevím si rady. Program má pouze 1 třídu. V kodu jsem vytvořil metodu, když pustím program a metodu zavolám, tak proběhne správně, ovšem, když metodu zavolám na jiném místě v kodu, tak už metoda nefunguje. Nechápu jak je to možné...jinak chybu to hlásí: EAccessViolation with message 'Access violation at address 004048D0 in module'hra.exe'. Read of address 20202018'. Strávil jsem nad řešením několik hodin, a pořád to nedává smysl...alespoň mě ne. Někomu tady ano? Děkuji za rady a tipy

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Pokud má program třídu (dejme tomu TTrida), musíš vytvořit objekt, napr. ObjektTrida Pak k metodam p…
Jan Fiala 20.05.2015 10:53
Jan Fiala
To je mi jasný. V tom chyba není. Prostě mam metodu, která načítá ze souboru do pole. Funguje správn…
Ernesto 20.05.2015 11:10
Ernesto
Bez kódu žádná další rada nebude. Access violation obvykle znamená, že přistupuješ k něčemu, co ješt…
Jan Fiala 20.05.2015 11:42
Jan Fiala
zde Zde je projekt ke stažení, v souboru problém je problém popsán a osvětlen :)
Ernesto 20.05.2015 11:57
Ernesto
Z toho popisu jsem teda nechopil kde a kdy to přesně padá. Pokud chceš pomoct, tak musíš být co nejp…
Wikan 20.05.2015 12:11
Wikan
V metodě cíl, to začíná výpočtem bodů, pod tím by se měla zavolat metoda zapisVysledek; a výsledky u…
Ernesto 20.05.2015 12:14
Ernesto
Nějak nevidím, že by se v proceduře cil volala procedura zapisVysledek. BTW: nepoužívej pojem metoda…
Wikan 20.05.2015 12:17
Wikan
jo, já to tam měl, pak zase ne, tak to tam tedka není, stačí to tam dopsat a bude to.... tak tam dej…
Ernesto 20.05.2015 12:19
Ernesto
Kdyz to spustim, tak to po vyberu z typu hry nic neudela a normalne se to ukonci. Jak mam postupovat…
Jan Fiala 20.05.2015 12:25
Jan Fiala
Je celý obsah RARu v jednom adresáři?
Ernesto 20.05.2015 12:26
Ernesto
Ano, presne jak jsi to poslal. Jen jsem to prelozil, spustil, vybral hrat, zadal jmeno, vybral hru,… nový
Jan Fiala 20.05.2015 12:31
Jan Fiala
To se mi nestává, nevím, kde je chyba. nový
Ernesto 20.05.2015 12:33
Ernesto
Volani Randomize se provadi jen jednou na zacatku programu. Ale to nesouvisi s tim, ze to nejede nový
Jan Fiala 20.05.2015 12:36
Jan Fiala
Treba Pole je deklarovane jako pole: array[1..50,1..21] of char; Ale nacitas do nej drahu, ktera ma… nový
Jan Fiala 20.05.2015 12:43
Jan Fiala
procedure THlMenu.cil; begin body := bonus + vzdalenost; ClrScr; GoToXY(20,5); tuhle část uprav na… nový
Ernesto 20.05.2015 12:55
Ernesto
Nespadne. Napise, ze doslo palivo, dostal jsem body a zobrazi se nabidka. Pokud chces pomoct, posli… nový
Jan Fiala 20.05.2015 13:04
Jan Fiala
No tak abys dojel do cíle, tak bud musíš sbírat palivo a nebo si na 153 řádku zvýšit počet paliva na… nový
Ernesto 20.05.2015 13:06
Ernesto
To by ta hra musela fungovat. Tak jak ji mas napsanou, tak precte prvnich 50 radku z programu a pak… nový
Jan Fiala 20.05.2015 13:32
Jan Fiala
Hra zcela funguje. Ano přečte sice 50 řádek, ale stejnak jich najednou více nezobrazím, tak jich nač… nový
Ernesto 20.05.2015 13:36
Ernesto
No právě že se dojede do cíle a hra spadne, to je ten problém, protože to skočí do toho načtení a ul… nový
Ernesto 20.05.2015 13:38
Ernesto
Tohle je tvoje nacitani drahy: repeat readln(textovy_soubor,ln); for i := 1 to length(ln) do begin… nový
Jan Fiala 20.05.2015 13:42
Jan Fiala
Ano, pouzivam klavesy 'a' a 'd'. Nikde nevidim v prubehu hry pozici auta a i kdyz mackam porad 'a' t… nový
Jan Fiala 20.05.2015 13:40
Jan Fiala
Vysvetli mi niekto ze preco si pri tej excepsne nepozre v debuggeri ze co mu to sposobilo? nový
MM.. 20.05.2015 13:43
MM..
Mě to prostě na notebooku funguje normálně, i na kamarádovo PC. Nevím, kde je problém. Mohu klidně u… nový
Ernesto 20.05.2015 13:48
Ernesto
Kde je problem najdes v tom debuggeri. OMG. 1minuta debugger vs. 250 hodin diskutovania. nový
MM.. 20.05.2015 13:55
MM..
Chápeš, že na 2 místech volám stejnou proceduru, a jednou funguje a jednou ne? Vím na kterém řádku j… nový
Ernesto 20.05.2015 14:04
Ernesto
Chápeme pouze to, že se bavíš o verzi, kterou máš u sebe na počítači a nám "blbečkům" jsi poslal úpl… nový
Jan Fiala 20.05.2015 14:08
Jan Fiala
Ono to kludne moze byt ten samy program akurat to vsetko zavisi na inych XY veciach. Chyba sa vysetr… nový
MM.. 20.05.2015 14:09
MM..
Vzhledem k tomu, ze mluvi o nacitani prvnich 50 radku, ze jsem musel opravovat zdrojak podle nej atd… poslední
Jan Fiala 20.05.2015 14:14
Jan Fiala
v debuggeri si mozes pozret riadok priamo na ktorom to nastalo, riadok vnutri procedury. Mozes si po… nový
MM.. 20.05.2015 14:08
MM..
Nauc sa pouzivat debugger.
MM.. 20.05.2015 11:53
MM..
Ten používat umím. Je tu ten kód, tak se můžete předvést. :)
Ernesto 20.05.2015 11:58
Ernesto
Keby si ho pouzil (resp. pouzit vedel), tak by si sa nepytal kde mas chybu.
MM.. 20.05.2015 12:02
MM..
Blbýma řečma mi fakt pomůžeš :D
Ernesto 20.05.2015 12:05
Ernesto
... debugger ti to vsetko jasne ukaze ze co je v jakych premennych/obejktoch a kam to skace a co to…
MM.. 20.05.2015 12:06
MM..
Já vim na jakém místě nastane problém. I jsem zkontroloval obsah proměných, a ten je správný.
Ernesto 20.05.2015 12:09
Ernesto
Keby bol spravny tak nenastane problem. Nauc sa to pouzivat poriadne. (dokonca ti aj ta exception hl… nový
MM.. 20.05.2015 12:49
MM..

V metodě cíl, to začíná výpočtem bodů, pod tím by se měla zavolat metoda zapisVysledek; a výsledky ukončeného závodu by se měli zapsat do pole. Ovšem v tu chvíli kdy to skočí do metody zapisVysledek, a má se začít načítat obsah pole ze souboru, tak to spadne. Stačí takto?

Treba Pole je deklarovane jako
pole: array[1..50,1..21] of char;

Ale nacitas do nej drahu, ktera ma 122 radku (tve soubory, ktere jsi poslal)

Ted uz se mi to spustilo, ale podle tveho popisu k chybe nikde nedoslo.
Az posles program, ktery chybu vykazuje, je funkcni a bude napsan postup, jak se k chybe dostat, muzeme pokracovat.

procedure THlMenu.cil;
begin
body := bonus + vzdalenost;
ClrScr;
GoToXY(20,5);

tuhle část uprav na

procedure THlMenu.cil;
begin
body := bonus + vzdalenost;
zapisVysledek;
ClrScr;
GoToXY(20,5);

A až dojedeš závod, tak se budou chtít načíst výsledky a zapsat tam ten aktuální, ovšem to se nastane, při načítání výsledků do pole program spadne...

To by ta hra musela fungovat.
Tak jak ji mas napsanou, tak precte prvnich 50 radku z programu a pak spadne, protoze pole mas deklarovane na 50.
Na klavesy to nijak nereagovalo. Takze urcite nemuzu dojet na 153 radek.

Takze bud posles aktualni verzi (a ne neco, co jsi nekde vyhrabal), ktera funguje a ktera "nekde" pada a muzeme hledat problem nebo s tim jednoduse nebudu ztracet cas.

Po zvyseni paliva v programu jsem dojel do cile a program se ukoncil, nevratil se do menu. Ja ted taky koncim, dokud neposles neco, co aspon trosku funguje

Tohle je tvoje nacitani drahy:

  repeat
    readln(textovy_soubor,ln);
    for i := 1 to length(ln) do begin
     case ln[i] of
     '5': pole[j,i] := #084;
     '6': pole[j,i] := #219;
     '7': pole[j,i] := #065;

     '8': pole[j,i] := #88;   //cil
     '4': pole[j,i] := #126;  //bonus
     '3': pole[j,i] := #43; //palivo
     '1': pole[j,i] := #178;
     '2': pole[j,i] := #220;
     '0': pole[j,i] := #32;
     else
     pole[j,i] := ln[i];
     end;
    end;
    inc(j);
  until eof(textovy_soubor);

Vysvetli mi, kde tam prosim nactes prvnich 50? Podle mne nikde. Ctes do konce souboru a pri 51 nacteni to zhuci, protoze pole je 1..50.

Zpět do poradny Odpovědět na původní otázku Nahoru