Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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 – Lekce 2 - Dynamická alokace paměti v jazyce C

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
DarkCoder
Člen
Avatar
Odpovídá na Patrik Pastor
DarkCoder:30.8.2019 12:59

Ve své aplikaci s žádnými daty nepracuješ. Skutečné aplikace si načítají potřebná data ze souborů do paměti, kde se s nimi z důvodu rychlosti pracuje. Pokud jsou tato modifikovaná data stále pouze v paměti, lze o ně jednoduše přijít. Pokud aplikace spadne ať už z důvodu nedostatku paměti, nesprávné funkčnosti, či jiného důvodu, o veškerá neuložená data se přijde. Jistě si pak dokážeš představit jak asi spokojený uživatel poté bude, když aplikace nebude stabilní. Ta ztracená data už nezískáš a to rozhodně není úsměvné.

Odpovědět
30.8.2019 12:59
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Patrik Pastor:30.8.2019 13:22

tomu rozumim, ale proc se mi potom nic nestalo? Sebral jsem tolik pameti (alokoval si), ze pocitac nebyl schopny reagovat, presto jsem o zadne data neprisel. O jake situaci tedy mluvis? Ja myslel ze to co jsem udelal be me "melo" o data pripravit

 
Odpovědět
30.8.2019 13:22
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Patrik Pastor
DarkCoder:30.8.2019 17:58

Tím bych si nebyl tak jist. Na pozadí Ti běželo X procesů, které prováděly nějaké operace a tyto operace nemusely být dokončeny a nezapsaly tak výsledek na disk. Jak moc závažné to je nelze říci. Mluvím o tom, kdy aplikace načte data ze souboru, provede na nich operaci, ale výsledek už se nezapíše zpět na disk neboť došlo k havárii systému.

Můžeš si to představit tak, že pokračuješ v psaní dokumentu ve Wordu a počítač Ti spadne. Když se pokusíš soubor otevřít, zjistíš, že si vlastně nic nezpracoval, protože žádná změny se Ti neuložily. Vše bylo pouze v paměti, nikoli však zaznamenané na disku.

Odpovědět
30.8.2019 17:58
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Patrik Pastor:30.8.2019 18:28

ok chapu, je to asi riziko pro jiz vetsi aplikace. Ale co se tyka me, tak sem videl pri bootovani v terminalu, jakk bliko 5 radku (klasicky treba jen jeden) - takze tohle jsem predpokladal ze to OS procistil, nebo se z toho "vzpamatoval".

Jak moc zavazne to je nelze rict.

Nijak sem to od te doby nepocitil, vsechno bezi v normalu, takze je to tak jak si mylism - OS se uz procistil. Pravdepodobne to je asi na Ubuntu od nejake X verze, aby se OS "zpravil" po overrun utokum (to mi prijde logicke), ale jestli OS opravdu ma nejake takova opatreni, fakt nevim

 
Odpovědět
30.8.2019 18:28
Avatar
Rostislav Kalčík:9.2.2021 22:08

Pravděpodobně se jedná o hloupý dotaz, ale vysvětlíte mi někdo proč se v tomto zápise musí zapsat:

p_i = (int *) ...

je to jakože laicky "deklarování" ukazatele na první adresu? Nebo to prostě dělá C automaticky a mě význam naprosto uniká.

p_i = (int *) malloc(sizeof(int) * 100);

Předem děkuji. :)

 
Odpovědět
9.2.2021 22:08
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Rostislav Kalčík
DarkCoder:9.2.2021 22:47

V C se toto nemusí udělat, ale je to vhodné (správnější). Dělá se to proto, protože funkce malloc() vrací obecný ukazatel (void *) a ty se snažíš o přiřazení vrácení hodnoty (ukazatel na blok přidělené paměti) do ukazatele typu int. To je důvod, proč je vhodné přetypování na ukazatel na typ int (int *).

Odpovědět
9.2.2021 22:47
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
 
Odpovědět
10.2.2021 8:29
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 7 zpráv z 27.