NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Koperníkův model Sluneční soustavy

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Lukáš Hruda
Tvůrce
Avatar
Lukáš Hruda:15.5.2013 21:33

Co ty memory leaky? :D

 
Odpovědět
15.5.2013 21:33
Avatar
Frunta
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
Frunta:15.5.2013 22:09

Nevím, co to je memory leak.

 
Odpovědět
15.5.2013 22:09
Avatar
Зайчик
Člen
Avatar
Odpovídá na Frunta
Зайчик:15.5.2013 22:37

únik paměti? xD

Odpovědět
15.5.2013 22:37
Коммунизм для нашего будущего!
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Frunta
Lukáš Hruda:15.5.2013 22:37

Únik paměti. Alokuješ objekty, ale už je nedealokuješ. Operátor new vytvoří objekt na haldě a pouze vrátí pointer na něj, ten objekt pak ale musíš někde dealokovat, což ty už neděláš. Navíc, objekty nemusíš vytvářet pouze pomocí operátoru new, můžeš ho prostě deklarovat a pak se o dealokaci paměti nemusíš starat.

 
Odpovědět
15.5.2013 22:37
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Frunta
Kit:16.5.2013 9:31

Programátoři, kteří se nechtějí zajímat o memory leaky, obvykle raději přesedlají na C# nebo Javu. Tam se o memory leaky moc starat nemusí, protože se za ně o to postará garbage collector.

Odpovědět
16.5.2013 9:31
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Lukáš Hruda
David Hartinger:16.5.2013 9:33

Vidíš, toho jsme si nevšimli, snad to Frunta alespoň opraví :)

Odpovědět
16.5.2013 9:33
New kid back on the block with a R.I.P
Avatar
Frunta
Tvůrce
Avatar
Frunta:16.5.2013 14:29

Odpověď na: Lukáš Hruda, Kit, David Hartinger
Děkuji za upozornění. Ne, že bych se nechtěl zajímat o memory leaky, ale jednoduše jsem se domníval, že se to smaže s ukončením aplikace. Samozřejmě to opravím.

 
Odpovědět
16.5.2013 14:29
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Frunta
Kit:16.5.2013 14:36

To se smaže s ukončením aplikace, ale je dobré si zvyknout po sobě uklízet kvůli možnosti použití toho kusu kódu v jiném programu, kde by už ty memory leaky mohly vadit.

Do tvého kódu jsem se nedíval, takže pokud tam v cyklu alokuješ další a další paměť, tak ten program dříve či později padne právě na memory leak.

Odpovědět
16.5.2013 14:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Frunta
Lukáš Hruda:16.5.2013 14:39

Ano, s koncem aplikace se uvolní veškerá paměť kterou program používal, paměť by se ale měla uvolňovat už ve chvíli, kdy ji přestaneš používat, většinou na té úrovni, kde byla paměť alokována.

 
Odpovědět
16.5.2013 14:39
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Frunta
Lukáš Hruda:16.5.2013 14:48

Mimochodem, uplně stačí, když nebudeš všechny objekty dělat dynamicky, v C++ můžeš objekt prostě deklarovat a ve spustě situacích to naprosto stačí.
Třeba místo...

Teleso* Slunce = new Teleso("Slunce", ucinit->sirka/2, ucinit->vyska/2, 0.0f, 1.0f, daysToUnit_360(25.0f), "files/images/Slunce.png", ucinit);

...můžeš udělat...

Teleso Slunce("Slunce", ucinit->sirka/2, ucinit->vyska/2, 0.0f, 1.0f, daysToUnit_360(25.0f), "files/images/Slunce.png", ucinit);

...nebo

Teleso Slunce = Teleso("Slunce", ucinit->sirka/2, ucinit->vyska/2, 0.0f, 1.0f, daysToUnit_360(25.0f), "files/images/Slunce.png", ucinit);

Poslední dva kódy jsou to samé. Jen pak Slunce nebude pointer na objekt, ale objekt sám. K jeho položkám pak nebudeš přistupovat pomocí operátoru -> ale .

Editováno 16.5.2013 14:49
 
Odpovědět
16.5.2013 14:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 12.