Error 1: Out of Memory – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Error 1: Out of Memory – Pascal – Fórum – Programujte.comError 1: Out of Memory – Pascal – Fórum – Programujte.com

 

15. 7. 2007   #1
-
0
-

Jsem chtěl rozšířit svůj program o další level, ale z nějakého důvodu mi TurboPascal píše Error 1: Out of Memory. Přitom proměnných je pořád stejně a když jsem to testoval s jedním upgradem od Mircosofta, tak jich tam bylo ještě daleko víc. Momentálně to vypadá tak, že jsou tři levely hotové a pro 4. a 5. je připravená kostra. Když dám jakýkoliv z těch dvou do komentáře, spustí se to, ale jakmile jsou oba platné, vyskočí chyba. Nevíte někdo, čím to je a jak to obejít? Předem dík.

Nahlásit jako SPAM
IP: ...–
Matrix17
~ Anonymní uživatel
300 příspěvků
16. 7. 2007   #2
-
0
-

To Lukfi: Podle chyby bych soudil, že přistupuješ k paměti, která neni "tvoje". Čili si překontroluj ukazatele popřípadě jestli tam máš pole tak řídící proměný v cyklech, kterýma ty pole procházíš.

Nahlásit jako SPAM
IP: ...–
16. 7. 2007   #3
-
0
-

Ukazatele nepoužívám a kdybych udělal chybu u proměnných, které řídí cykly, tak to napíše něco Out of range, a já to kvůli knihovně pro zvuk mám vypnutý takže by se to spustilo tak jako tak a pak by to dělalo kraviny. Jak píšu: mám tři levely a kostru pro dva další, přičemž kostra znamená jen kopie staršího kódu (kterej funguje), do kterýho pak připíšu novej kód. Jemu vadí když jsou ty dva levely aktivní oba najednou, ale když je jeden nebo druhej danej jako komentář, tak se to spustí.

Nahlásit jako SPAM
IP: ...–
survik1
~ Moderátor
0
Posthunter
16. 7. 2007   #4
-
0
-

To Lukfi: Co pole? Nepoužíváš pro všechno jedno pole, které pak "přeteče" ?

Nahlásit jako SPAM
IP: ...–
Život je jen hra, která se nedá vyhrát.
16. 7. 2007   #5
-
0
-

Jsem blbej já, nebo vy neumíte číst?

Nahlásit jako SPAM
IP: ...–
survik1
~ Moderátor
0
Posthunter
16. 7. 2007   #6
-
0
-

To Lukfi: Já jsem jen Céčkař, tak hádám od sebe ;)

Nahlásit jako SPAM
IP: ...–
Život je jen hra, která se nedá vyhrát.
Matrix17
~ Anonymní uživatel
300 příspěvků
16. 7. 2007   #7
-
0
-

To Lukfi: Já sem na tom podobně jako survik1 sice sem v packalu dělal ale už je to nějakej čas. Ale napadá mě ještě jedna varianta. Myslím, že nám učitel říkal že pascal má při kompilaci omezení paměti kterou může využít tudíž když zkompiluješ svůj kód nevejdeš se do toho omezení a vyhodí to tuhle chybu. Jen hádám ale pokud mám pravdu tak se tam dá určitě někde nastavit velikost tý paměti. Opravdu to je spíš střela od boku.

Nahlásit jako SPAM
IP: ...–
16. 7. 2007   #8
-
0
-

=>Matrix17: Jo, je tady v menu volba Memory sizes a v ní:
Stack size ... 16384
Low heap limit ... 0
High heap limit ... 655360 (tedy 640KiB)
Když zvýším to první, tak se nic nestane, a to druhý nejde nastavit vyšší než co už tam je. Tak to je teda v pr...

Nahlásit jako SPAM
IP: ...–
Matrix17
~ Anonymní uživatel
300 příspěvků
16. 7. 2007   #9
-
0
-

To Lukfi: Tak pak mám ještě jednu variantu a to že by sis dal všechny informace o levelech do nějakýho externího souboru ze kterýho by sis je vytáhl když bys je potřeboval. Zkrátíš si tím zdroják a snad i ušetříš paměť.

Nahlásit jako SPAM
IP: ...–
Chiquita_CZ0
Newbie
16. 7. 2007   #10
-
0
-

A co používáš za pascal?? od borlandu?? kdyžtak zkus FreePascal, třeba by to v něm šlo. Kód by nemělo být potřeba nějak významně editovat.

Nahlásit jako SPAM
IP: ...–
17. 7. 2007   #11
-
0
-

=>Matrix17: Rozsekat na knihovny... hmm... procedury na kreslení by se teoreticky daly dát do knihovny, kdybych to přepsal tak aby si netahaly parametry z globálních proměnnejch ale aby se jim předávaly. Nebo myslíš nějakej datovej soubor, ze kterýho by to četlo? Mě spíš napadla jiná věc, ale s tím by mi musel někdo pomoct - využít nějakou rozšířenou paměť (XMS/EMS).

=>Chiquita_CZ: Používám Turbo Pascal 7.0, FPC mám taky, ale Mircosoftovy knihovny tam nefungujou...

Nahlásit jako SPAM
IP: ...–
Matrix17
~ Anonymní uživatel
300 příspěvků
17. 7. 2007   #12
-
0
-

To Lukfi: Přesně tak, datovej soubor. Nechal bys všechny procedury/funkce u sebe a data o úrovních bys hodil do nějakýho souboru.

Nahlásit jako SPAM
IP: ...–
17. 7. 2007   #13
-
0
-

=>Matrix17: no to je sice fajn, ale práci se soubory mě nikdo nenaučil :'( a kromě toho, jaký data? konstanty? počet proměnnejch jsem při přidávání levelu nezvýšil, tak nevím k čemu by mi to pomohlo...

Nahlásit jako SPAM
IP: ...–
Matrix17
~ Anonymní uživatel
300 příspěvků
17. 7. 2007   #14
-
0
-

To Lukfi: Práci se souborama vygooglíš. V tom souboru bych to viděl takhle. Nejprve šáhneš do souboru vytáhneš si data 1. levelu. Hráč odehraje. Šáhneš znova do souboru pro nový data ty starý se přemažou a jede se dál. Kdybys náhodou nemohl nic najít tak bych ti sem něco hodil.

Nahlásit jako SPAM
IP: ...–
17. 7. 2007   #15
-
0
-

Já si to ale pořád nedokážu představit. Pro každý level se předem přiřazuje maximálně 10 hodnot, zbytek se generuje náhodně nebo se přiřazuje během hraní podle time indexu. Jinak to vypadá přibližně takhle:

velký REPEAT cyklus

case level:byte of
0: hlavní menu, pak jsou 254, 253, 250 různý vypisovací obrazovky, to neni důležitý
1: level
levelmenu
nastavení proměnných
malý repeat cyklus
until podmínky ukončení levelu - různé
end;{case}
UNTIL level=255

Těch levelů je dohromady 5 (dva z toho jsou teda jenom základ, kterej je stejnej pro všechny levely, např. ovládání. Jinak se ty levely liší právě podle toho kódu, každý vypadá úplně jinak, nejsou to jen "úrovně" které se liší jen rychlostí hry nebo počtem něčeho. Na začátku programu jsou definované všechny proměnné, jejich počet se s přidáváním levelů nezvyšuje (druhý level totiž potřebuje hodně souřadnic a ve třetím levelu jsou ty dvě pole tak porůznu použitý na všechno možný).

Takže jaký data bych tam jako měl načítat? :-|

Nahlásit jako SPAM
IP: ...–
Matrix17
~ Anonymní uživatel
300 příspěvků
17. 7. 2007   #16
-
0
-

Pokud možno co nejvíc dat který zůstavaj stejný. Pak se pokus aby co nejvíc proměnný který potřebuješ "chvilku" byly dostupný "chvilku". Myslím tím zavoláš funkci/proceduru která si vytvoří nějaký lokalní proměnný, který budou "dělat" to, co bude potřeba. Jakmile procedura/funkce skončí tyhle proměný odpadnou a je to.

Nahlásit jako SPAM
IP: ...–
17. 7. 2007   #17
-
0
-

Můžu leda udělat knihovnu a do ní si naházet procedury na kreslení, ale to je tak všechno. Data, který zůstávaj stejný, toho je minimum. Lokální proměnné nepoužívám, na všechno používám globální které jsou potřeba tak jako tak třeba v jiných levelech. Takže bych leda mohl udělat levely jako procedury a všude by se alokovaly nějaké lokální proměnné. Ale nevím, jestli by to pomohlo, protože ty se tváříš, jakože vůbec nebereš na vědomí tohle:
***********************************************
S počtem levelů neroste počet proměnných.
***********************************************

Nahlásit jako SPAM
IP: ...–
Matrix17
~ Anonymní uživatel
300 příspěvků
17. 7. 2007   #18
-
0
-

Na počtu vůbec nezáleží. Když budeš mít pole který má sto prvků. Tak záleží nejen na počtu ale hlavně na typu. Protože pole který má typ char bude mnohem menší než pole který má typ integer atd. Takže na počet se nezaměřuj. Teď teda k proměnejm. Prober se jima a ověř si jestli by nešli použít menší (místo integer short, místo longint integer - nejsem si jistej názvama v C++ je to trochu jinak) případně jestli někde nepoužíváš zbytečně velký pole než je třeba.

Nahlásit jako SPAM
IP: ...–
17. 7. 2007   #19
-
0
-

Proměnný používám jen takový co jsou třeba. Ale tím to nebude. V předchozí verzi programu jsem měl dvě pole, dohromady asi 80 longintů, než mě napadlo to otočit a mít 2 longinty a 160 integerů (plus jak jsem psal, jsem testoval jeden upgrade, kde bylo potřeba ještě další pole 80 integer nebo word a 80 shortint - a nebyl problém). Těch 160 integerů je potřeba pro jeden level - no asi by to šlo vyřešit i líp, ale pak stejně potřebuju v dalších levelech jiný proměnný, byť teda na ně stačí byte/shortint a ty si ukládám do toho pole. No každopádně jak se ti celou dobu snažím vysvětlit: se současnou sadou proměnných to chodilo dřív, neměnil jsem ani počet, ani typy.

Ale přišel jsem na jinou věc. Jen tak experimentálně jsem komentářem zrušil dvě procedury (kreslení, který v současnejch levelech nepotřebuju) a jelo to. Takže když udělám na kreslení knihovnu, budu mít zase nějakej prostor. Ale jenom to můj problém oddálí - za pár tejdnů si tu budu stěžovat zase. Chce to nějaké Endlösung.

Nahlásit jako SPAM
IP: ...–
Mircosoft+1
Věrný člen
17. 7. 2007   #20
-
0
-

Out of memory je chyba překladače, kterému nestačí paměť na překlad. S počtem ani velikostí proměnných vůbec nesouvisí, jenom s délkou kódu (= programu) a konstant. Objevuje se mi poměrně často a řeším ji takhle:

1) Compile -> Destination: disk (jestli to tak ještě nemáš)
2) Options -> Compiler -> vypnout Debug info a Local symbols (to ušetří docela dost)
3) Options -> Linker nebo tam někde -> nastavit Link buffer na disk (píše se o tom v helpu)
3) Compile -> Build. Kdyby nešlo všechno najednou, tak nejdřív buildni zvlášť všechny použité jednotky a až potom program (mimochodem, když program spustíš přes Ctrl+F9 těsně po buildu, tak v něm budeš mít mnohem víc volné paměti).

Kompiluješ v TURBO.EXE nebo v TPX.EXE? TPX má volné paměti daleko víc, protože překladač sídlí někde v HMA nebo tak nějak.

Už je to lepší?

Nahlásit jako SPAM
IP: ...–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
18. 7. 2007   #21
-
0
-

Tak jsem vypnul to debuggování a přenastavil Link buffer na disk, a jede to. Kompiluju přes turbo.exe. Tak díky, pak když to zase nepůjde zkusím ten tpx.exe.

//update: tak evidentně žádnej TPX.EXE nemám...

Nahlásit jako SPAM
IP: ...–
Mircosoft+1
Věrný člen
18. 7. 2007   #22
-
0
-

Koukni ke mně do "užitečných drobností", první odkaz nahoře, první zip-soubor s exáčema, tam ho najdeš.

Nahlásit jako SPAM
IP: ...–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý