abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 05:11 | Nová verze

    OCCT3D (Open CASCADE Technology) Open Source 8.0 bylo vydáno. OCCT3D (Wikipedie, GitHub) je objektově orientovaná knihovna pro 3D CAD, CAM nebo CAE. Používá se například v softwarech FreeCAD a KiCad.

    Ladislav Hagara | Komentářů: 2
    včera 02:22 | Bezpečnostní upozornění

    Ve FreeBSD byla nalezena a již opravena 21letá zranitelnost CVE-2026-42511 v dhclient. Jedná se o vzdálené spuštění kódu (RCE). Útočník mající pod správou DHCP server může získat plnou kontrolu nad systémem FreeBSD pouze jeho připojením k místní síti.

    Ladislav Hagara | Komentářů: 0
    9.5. 17:22 | Komunita

    Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.

    Ladislav Hagara | Komentářů: 0
    9.5. 00:11 | Nová verze

    UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch 24.04-1.3. Současně oznámila, že nadcházející větší vydání 24.04-2.0 bude mít modernější webový prohlížeč.

    Ladislav Hagara | Komentářů: 0
    8.5. 17:11 | Zajímavý projekt

    Ploopy po DIY trackballech či sluchátkách představuje nový externí DIY trackpoint se čtyřmi tlačítky Bean. Obsahuje snímač Texas Instruments TMAG5273, spínače Omron D2LS-21 a řadič RP2040, používá firmware QMK. Schémata jsou na GitHubu; sadu lze předobjednat za 69 kanadských dolarů (bez dopravy a DPH).

    |🇵🇸 | Komentářů: 0
    8.5. 03:33 | Zajímavý článek

    Mozilla před dvěma týdny na svém blogu oznámila, že díky Claude Mythos Preview bylo ve Firefoxu nalezeno a opraveno 271 bezpečnostních chyb. Včera vyšel na Mozilla Hacks článek s podrobnějšími informacemi. Z 271 bezpečnostních chyb mělo 180 chyb vysokou závažnost, 80 chyb střední závažnost a 11 chyb nízkou závažnost. Celkově bylo v dubnu ve Firefoxu opraveno 423 bezpečnostních chyb. Čísla CVE nemusí být přiřazována jednotlivým chybám. CVE-2026-6784 například představuje 154 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    7.5. 22:55 | Bezpečnostní upozornění

    Před týdnem zranitelnost Copy Fail. Dnes zranitelnost Dirty Frag. Běžný uživatel může na Linuxu získat práva roota (lokální eskalaci práv). Na většině linuxových distribucí vydaných od roku 2017. Aktuálně bez oficiální záplaty a CVE čísla [oss-security mailing list].

    Ladislav Hagara | Komentářů: 9
    7.5. 14:00 | Humor

    Ačkoli je papež Lev XIV. hlavou katolické církve a stojí v čele více než miliardy věřících po celém světě, také on někdy řeší všední potíže. A kdo v životě neměl problémy se zákaznickou linkou? Krátce poté, co nastoupil do úřadu, musel papež se svou bankou řešit změnu údajů. Operátorka ale nechtěla uvěřit, s kým mluví, a Svatému otci zavěsila.

    Ladislav Hagara | Komentářů: 11
    7.5. 05:11 | Nová verze

    Incus, komunitní fork nástroje pro správu kontejnerů LXD, byl vydán ve verzi 7.0 LTS (YouTube). Stejně tak související LXC a LXCFS.

    Ladislav Hagara | Komentářů: 0
    7.5. 05:00 | Nová verze

    Google Chrome 148 byl prohlášen za stabilní. Nejnovější stabilní verze 148.0.7778.96 přináší řadu novinek z hlediska uživatelů i vývojářů. Vypíchnout lze Prompt API (demo) pro přímý přístup k AI v zařízení. Podrobný přehled v poznámkách k vydání. Opraveno bylo 127 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (13%)
     (8%)
     (2%)
     (14%)
     (31%)
     (4%)
     (7%)
     (3%)
     (16%)
     (25%)
    Celkem 1570 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Dotaz: C - dynamicka alokace pole

    15.7.2014 19:31 Lada
    C - dynamicka alokace pole
    Přečteno: 376×
    Jak v C spravne naalokovat trirozmerne dynamicke pole? Ucim se z Herouta, prvni dil mam za sebou a pustil jsem se do druheho ale toto mi stale neni jasne, neni to tam tak uplne vysvetlene. Priklad: chci trirozmerne pole s X, Y, Z rozmery, typu int. Zajimala by me jednak sturktura "pole pointeru" a tez "pointer na pointer". Pokud mozno i testem prideleni s naslednym uvolnenim pameti, mam v tom trochu gulas. Diky za pomoc, Lada

    Řešení dotazu:


    Odpovědi

    15.7.2014 20:40 pou | skóre: 18
    Rozbalit Rozbalit vše Re: C - dynamicka alokace pole

    Dělal bych to asi tak to:

     

    int len_a;
    int len_b;
    int len_c;

    int ***p;
    p=malloc(len_a*sizeof(**int));
    for(int i=0;i<len_a;i++){
    p[i]=malloc(len_b*sizeof(*int));
    for(int j=0;j<len_b;j++)
    p[i][j]=malloc(len_c*sizeof(int));
    }

    16.7.2014 13:06 lertimir | skóre: 64 | blog: Par_slov
    Rozbalit Rozbalit vše Re: C - dynamicka alokace pole
    Ten zápis je opravdu korektní alokace pro 3D pole, ale jak už tady psali, rozumnější je udělat něco jako:
    int len_a;
    int len_b;
    int len_c;
    
    int *p2;
    
    p2=malloc(len_a*len_b*len_c*sizeof(int));
    
    a potom k prvku a,b,c se přistupuje p2[a*len_b*len_c+b*len_c+c]

    má to tu výhodu, že jsou data kompaktně naalokována. A alokace paměťového bloku od systému je obecně dost pomalá operace. Na druhou stranu v případě, že se intenzívně pracuje přes indexy a a b může mít výhodu ten standardní přístup, protože k prvku pole se přistupuje přes dvakrát pointer a 3x sčítání a není tam násobení. Ten standardní přístup se sem přídá tím, že naalokuji ještě.
    
    int ***p, **p1;
    p=malloc(len_a*sizeof(**int));
    p1=malloc(len_a*len_b*sizeof(*int));
    for(int i=0;i<len_a;i++){
      p[i]=p1+i*len_b;
      for(int j=0;j<len_b;j++){
        p1[j+i*len_b]=p2+(i*len_b+j)*len_c;
      }
    }
    
    A pak je p2 pole dat, poskládané tak, že c prvek je nejrychlejší, p1 pole pointrů na data, každý pointr ukazuje na prvek s nulovým c indexem, p pole pointrů do pole pointrů, každý pointr ukazuje na pointr, který směřuje na prvek s nulovou hodnotou indexu b.
    Josef Kufner avatar 15.7.2014 20:54 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: C - dynamicka alokace pole
    Vícerozměrná pole v C jsou tak trošku iluze. Nejlepší je spočítat si velikost potřebného bloku paměti a alokovat si ho najednou. K přístupu pak použít mapovací makro či funkci, která přepočítá 3D souřadnice na 1D.
    Hello world ! Segmentation fault (core dumped)
    15.7.2014 22:26 Petr | skóre: 29
    Rozbalit Rozbalit vše Re: C - dynamicka alokace pole
    "Nejlepší je spočítat si velikost potřebného bloku paměti a alokovat si ho najednou." a neslouzi k tomu prave funkce malloc?
    Josef Kufner avatar 15.7.2014 22:32 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: C - dynamicka alokace pole
    Slouží. A jejím parametrem je velikost paměti v bytech, což je to, co si má spočítat.
    Hello world ! Segmentation fault (core dumped)
    15.7.2014 22:34 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: C - dynamicka alokace pole
    Myslel tím, aby se ta funkce malloc() nevolala v cyklu tolikrát, ale jen jednou.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    Josef Kufner avatar 15.7.2014 22:34 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: C - dynamicka alokace pole
    Přesně tak.
    Hello world ! Segmentation fault (core dumped)
    15.7.2014 22:37 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: C - dynamicka alokace pole
    Slouží k té druhé části, k té první se může hodit operátor sizeof ;-)
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    15.7.2014 22:46 MadCatX
    Rozbalit Rozbalit vše Re: C - dynamicka alokace pole
    To samozřejmě slouží, ale než volat malloc() veletucetkrát ze dvou vnořených cyklů je lepší udělat malloc(sizeof(my_type_t) * x * y * z).

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.