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í
×
    dnes 05:11 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za prosinec 2025 a leden 2026 (YouTube). Zajímavé, že i v roce 2026 celou řadu problémů vyřeší falšování řetězce User-Agent.

    Ladislav Hagara | Komentářů: 1
    včera 20:11 | Komunita

    Bylo rozhodnuto, že Linux From Scratch (LFS) končí s podporou System V init. Nové verze knih s návody na instalaci vlastního linuxového systému ze zdrojových kódů už budou pouze se systemd.

    Ladislav Hagara | Komentářů: 5
    včera 17:00 | Nová verze

    Byla vydána nová verze 2026.1.0 "Like a Version" svobodného softwaru ScummVM (Wikipedie) umožňujícího bezproblémový běh mnoha klasických adventur na zařízeních, pro které nebyly nikdy určeny. Přehled novinek v poznámkách k vydání a na GitHubu. Změněno bylo číslování verzí. Předchozí verze byla 2.9.1.

    Ladislav Hagara | Komentářů: 2
    včera 14:55 | IT novinky

    Internetový prohlížeč Firefox bude mít nové ovládací prvky pro umělou inteligenci, které umožní uživatelům vypnout vestavěné AI funkce přímo v nastavení prohlížeče. Jednotlivě půjde vypnout nebo zapnout automatické překlady stránek, generovaní popisného textu k obrázkům v otevřených PDF dokumentech, samoorganizaci tabů do skupin, náhledy odkazů s krátkým shrnutím a boční panel s chatbotem. Tyto možnosti v nastavení prohlížeče

    … více »
    NUKE GAZA! 🎆 | Komentářů: 6
    včera 14:44 | IT novinky

    Desktopové prostředí KDE Plasma 6.6, která je právě ve fázi beta, nahrazuje stávající SDDM novým Plasma Login Managerem, který je ale pevně navázán na systemd. Plasma Login Manager využívá systemd-logind a další součásti systemd, které nejsou dostupné v operačních systémech bez systemd, jako je například FreeBSD, případně jsou linuxové distribuce Gentoo, Void Linux anebo Alpine Linux. Pro uživatele zatím stále ještě existuje možnost používat SDDM.

    NUKE GAZA! 🎆 | Komentářů: 4
    včera 14:33 | Komunita

    Na webu komunitního setkání CSNOG 2026 jsou dostupné prezentace v PDF, jejich videozáznamy a fotografie z lednové akce ve Zlíně. CSNOG 2026 se zúčastnilo téměř 300 zájemců o vystoupení věnovaných správě sítí, legislativním a regulačním tématům nebo projektům z akademické sféry. Letos byly prezentace rozdělené do dvou treků, ve kterých se představilo 35 přednášejících. Setkání komunity CSNOG organizují společně sdružení CESNET, CZ.NIC a NIX.CZ.

    VSladek | Komentářů: 0
    včera 11:33 | IT novinky

    Americká vesmírná společnost SpaceX miliardáře Elona Muska koupila další Muskovu firmu xAI, která se zabývá vývojem umělé inteligence (AI). Informovala o tom na svém účtu na síti 𝕏. Musk tímto krokem propojí několik ze svých služeb, včetně chatbota s prvky umělé inteligence Grok, sociální sítě 𝕏 či satelitního internetového systému Starlink. Tržní hodnota společnosti SpaceX dosahuje jednoho bilionu dolarů (20,6 bilionu Kč), hodnota xAI pak činí 250 miliard dolarů.

    Ladislav Hagara | Komentářů: 3
    2.2. 23:22 | Bezpečnostní upozornění

    Byl odhalen supply chain attack na Notepad++: útočníci kompromitovali hosting Notepad++ a vybrané dotazy na aktualizace přesměrovávali na servery pod jejich kontrolou. Doporučuje se stáhnout instalátor a přeinstalovat.

    a1bert | Komentářů: 8
    2.2. 13:22 | Zajímavý projekt

    Francouzská veřejná správa má v rámci vládní iniciativy LaSuite Numérique ('Digitální sada') v plánu od roku 2027 přestat používat Microsoft Teams a Zoom a přejít na videokonferenční platformu Visio, hostovanou na vlastním hardwaru. Konkrétně se jedná o instance iniciativou vyvíjeného open-source nástroje LaSuite Meet, jehož centrální komponentou je LiveKit. Visio nebude dostupné pro veřejnost, nicméně LaSuite Meet je k dispozici pod licencí MIT.

    NUKE GAZA! 🎆 | Komentářů: 5
    2.2. 12:11 | IT novinky

    Eben Upton oznámil další zdražení počítačů Raspberry Pi: 2GB verze o 10 dolarů, 4GB verze o 15 dolarů, 8GB verze o 30 dolarů a 16GB verze o 60 dolarů. Kvůli růstu cen pamětí. Po dvou měsících od předchozího zdražení.

    Ladislav Hagara | Komentářů: 18
    Které desktopové prostředí na Linuxu používáte?
     (18%)
     (6%)
     (0%)
     (10%)
     (25%)
     (3%)
     (5%)
     (2%)
     (12%)
     (30%)
    Celkem 747 hlasů
     Komentářů: 25, poslední včera 19:50
    Rozcestník

    Dotaz: Ukazatele v C

    2.3.2006 15:22 Jiří Daněk | skóre: 12 | blog: muj_blogisek
    Ukazatele v C
    Přečteno: 397×
    Dobrý den. Chtěl bych se zeptat, proč tento kód provede bez chyb:

    void main(void)
    {
    int *p;
    p = (int *) malloc(sizeof(int *) * 5);
    p[2]=10;
    p[50]=11;
    printf("%d", p[50]);
    free(p);
    }
    A jak by se, prosím vás, dalo toto zapsat správně? Díky.
    Byl jeden pán a ten měl psa. HAFUŠA se jmenoval.

    Odpovědi

    2.3.2006 15:44 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Provede se "správně" v tom smyslu, že to náhodou funguje. Jestli to chápu správně, příslušné systémové volání kernelu přiděluje procesu paměť de facto po násobcích stránek - částečně stránku přidělit nemůže. Ten pointer se trefí do části přidělené systémovým voláním, ale nikoli do oblasti zaregistrované jako přidělené pomocí standardní funkce malloc. Takže kernel OS si ničeho nevšimne a malloc/free mechanismus o těch datech přehled taky nemá.

    A že to náhodou funguje nemusí znamenat, že to bude fungovat vždy a všude. ;-)
    2.3.2006 15:44 Jirka
    Rozbalit Rozbalit vše Re: Ukazatele v C
    1. Nejsem si jistý, zda to nepatří do jiného fóra než do Linuxu.

    2. Otázka je nějak divně formulována. Nejdřív se ptáte, "proč tento kód provede bez chyb", pak "jak by se toto dalo zapsat spravně". Moc tomu nerozumím. Otázka o správnosti úzce souvisí i s tím, co to má dělat. To taky není jasné.

    3. Pointer p ukazuje na int, ale alokujete pamět na 5 ukazatelů na int, nikoliv na 5 integerů.

    4. Ochrana přístupu do oblasti mimo alokovanou paměť je asi věcí systému. Takže patrně záleží i na tom, pod čím to pouštíte.

    Jirka
    2.3.2006 20:53 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Ukazatele v C
    3. Pointer p ukazuje na int, ale alokujete pamět na 5 ukazatelů na int, nikoliv na 5 integerů.
    Na většině systémů jsou oba typy 32bitové, takže žádný problém.
    Quando omni flunkus moritati
    2.3.2006 21:01 finn | skóre: 43 | blog: finnlandia | 49° 44´/13° 22´
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Tím hůř. Hledat chybu, která se projevuje jen při konjunkci Jupiteru s Marsem, je nezáviděníhodný úkol.
    Užívej dne – možná je tvůj poslední.
    2.3.2006 21:40 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Ukazatele v C
    To nebylo příliš povedené ani jako vtip. Pokud jste to náhodou myslel vážně, mohu vám poradit jediné: neprogramujte, a neposlechnete-li mne, aspoň své výtvory nezveřejňujte.
    2.3.2006 22:21 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Jsou jazyky kde by mu to nebylo dovoleno (nebo spíš, kde by něco takového nemělo smysl dělat), tak ohledně programování není ještě nic ztraceno ;-)
    Copak toho není dost?
    2.3.2006 23:12 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Tady jde spíš o přístup, s takovým by ho nezachránil ani Karel…
    2.3.2006 23:43 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Na většině systémů jsou oba typy 32bitové, takže žádný problém při překladu a spuštění na platformě x86 nenastane

    Pokud si myslíte, že tím jsem chtěl tvrdit, že ten zápis je programátorsky v pořádku, tak nechtěl

    Suma sumárum k té vaší radě - trhněte si nohou !
    Quando omni flunkus moritati
    3.3.2006 00:20 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Nohou si netrhnu. Už to tu padlo jednou, ale asi je třeba to zopakovat: program, který většinou funguje, je daleko nebezpečnější, než program, který nefunguje skoro nikdy.
    3.3.2006 00:24 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Ale zase je aspoň nějaká šance že občas udělá co má :-)

    (já jenom tak rejpu, původně jsem pouze naznačoval, že ačkoliv to samozřejmě chyba je, tak na řešený problém to nejspíše vliv nemá)
    Copak toho není dost?
    3.3.2006 00:32 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Otázka zněla, proč se daný kód provede bez chyb. Odpověď: protože na dnešních x86 sizeof(int) == sizeof(int*). Za tímhle tvrzení si stojím. Tečka.
    #include <stdio.h>
    
    int main (void) {
     printf ("%i, %i\n", sizeof(int), sizeof(int*));
     return 0;
     }
    
    #gcc -o sizeof -Wall -pedantic sizeof.c
    #./sizeof
    4, 4
    #
    
    Nikdy jsem netvrdil, že ten zápis v otázce je dobře nebo dokonce že by se to tak mělo dělat. Nikdy jsem netvrdil, že přístup "na x86 to bude fungovat, tak to tak nechám" je správný. Proto mi ani nemusíte opakovat, že
    program, který většinou funguje, je daleko nebezpečnější, než program, který nefunguje skoro nikdy.
    Opravdu nemusíte. Vím to sám.
    Quando omni flunkus moritati
    Viliam Púčik avatar 2.3.2006 15:52 Viliam Púčik | skóre: 22 | blog: minimal
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Takto sa ti program sice skompiluje, ale urcite nepracuje spravne....
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	int *p;
    	p = (int *) malloc(sizeof(int *) * 5);
    	p[2]=10;	
    	p[50]=11;
    	printf("%d", p[50]);
    	free(p);
    	
    	return 0;
    }
    

    V prvom rade su dost podozrive nasledujuce prikazy:
    p = (int *) malloc(sizeof(int *) * 5);
    p[2]=10;
    
    Vytvoril si si totiz volnu pamat velkosti (5*smernik na int) a nasledne zapisujes do tohto pola ako by to bolo pole intov. Pravdepodobne to malo vyzarat takto:
    p = (int *) malloc( sizeof(int) * 5 );
    
    Takisto tu je problem s tym, ze zapisujes na miesto, ktore ti takpovediac nepatri (p[50]=11;)...
    Normalny program by vyzeral asi takto:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	int *p;
    	p = (int *) malloc( sizeof(int) * 51 );
    	p[2]=10;	
    	p[50]=11;
    	printf("%d", p[50]);
    	free(p);
    	
    	return 0;
    }
    
    Viliam Púčik avatar 2.3.2006 15:54 Viliam Púčik | skóre: 22 | blog: minimal
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Ako pozeram, uz to tu niekto predo mnou napisal. Asi som si zabudol reloadnut stranku...
    2.3.2006 15:57 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše Re: Ukazatele v C
    No, jenže vzhledem k tomu, že ukazatel na int a int mají třeba u mě shodnou velikost čtyř bajtů, tak to na funkčnost programu přímý vliv nějak extra asi mít nebude :-)
    Copak toho není dost?
    Viliam Púčik avatar 2.3.2006 16:08 Viliam Púčik | skóre: 22 | blog: minimal
    Rozbalit Rozbalit vše Re: Ukazatele v C
    ... tak to na funkčnost programu přímý vliv nějak extra asi mít nebude :-)

    Skompiluj to pod inym kompilatorom (GCC/...) alebo pod inym systemom (Linux/Wind32/Win16/...) alebo pod inou platformou a uvidis aky to bude mat extra vplyv ;-)
    2.3.2006 16:15 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše Re: Ukazatele v C
    No samozřejmě :-) Ale u tazatele čekám podmínky dost podobné. A i kdyby, tak to bude třeba dvakrát víc nebo půlka, to ještě není tak hrozné :-)
    Copak toho není dost?
    2.3.2006 18:44 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Bylo by to celkem vtipné, kdyby stejně neuvažovala spousta programátorů a kdyby podle této logiky nepsali své aplikace…
    2.3.2006 19:02 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Zase si představte svět, kde by se všechno na první pokus zkompilovalo a i běželo bez chyb, kdo by tam chtěl žít? ;-)
    Copak toho není dost?
    2.3.2006 21:41 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Lidé, kteří mají u producentů distribucí na starosti balíčkování? :-)
    2.3.2006 15:56 podlesh | skóre: 38 | Freiburg im Breisgau
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Zásada č.I: zapni všechny warningy (-Wall)

    Zásada č.II: vždy používej nějaký malloc debugger.

    Jedním z nejjednodušších je electric fence, stačí jen přilinkovat k binárce -lefence . Nedělá nic jiného než že zajistí, že takto špatně napsaný program spolehlivě chcípne na SIGSEGV (jak se sluší a patří).
    Josef Kufner avatar 2.3.2006 19:33 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Tohle je ideální pro výlet do krajin obývaných démony, draky a coredumpy...

    Tím že něco napíšeš do paměti, kterou ti sice systém věnoval, ale nemáš zaručeno co tam je nebo bude, si fakt koleduješ o opravdu divné chování programu a okamžitý segfault je to nejlepší co tě v tomhle případě může potkat. To že to náhodou funuje je asi ta nejhorší varianta.

    Jakmile napíšeš něco většího, tak si tímhle přepíšeš data, která můžou patřit čemukoliv a například pokud si přepíšeš pár byte za alokovanou pamětí tak se jí obvykle nepovede uvolnit, protože malloc tam má něco uloženého... nebo si přepíšeš nějakou drobnost a třeba GTK si pak při odebrání posledního widgetu z hboxu bude hrát na ospalou a bude kašlat na další data přicházející z unixového socketu, který se inicializuje úplně někde jinde a vlastně s ním gtk ani nic nedělá...
    Hello world ! Segmentation fault (core dumped)
    3.3.2006 15:44 Jiří Daněk | skóre: 12 | blog: muj_blogisek
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Mě spíš trápí rápí ten zápis do nalokované paměti (i[55] =5;). To by mi přece nemělo být dovoleno. A měl bych ještě jeden kousek podivného malloc kódu načítajícího soubor do pole:

    char **pole;
    scena = fopen( "./config/scena.txt" , "rt");
    pole = (char **)malloc(sizeof(char*));
    char buffer[512];
    while(fscanf(scena, "%s",&buffer) != EOF){
    pole[i] = (char *)malloc(sizeof(char) * strlen(buffer));
    strcpy(pole[i], buffer);
    i++;
    }

    Já si myslím, že to nemůže fungovat, ale funguje, a dokonce spolehlivě (hru obsahující toto jsem spustil tak stokrát).
    Byl jeden pán a ten měl psa. HAFUŠA se jmenoval.
    3.3.2006 15:49 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše Re: Ukazatele v C
    To je v nějakým veřejně dostupným OSS projektu? Abych se tomu zdaleka vyhnul :-)
    Copak toho není dost?
    3.3.2006 15:55 Jiří Daněk | skóre: 12 | blog: muj_blogisek
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Ne. Je to moje dílko. Tedy už se to tam nevyskytuje :-).
    Byl jeden pán a ten měl psa. HAFUŠA se jmenoval.
    Josef Kufner avatar 3.3.2006 15:57 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Fungovat to za nekterych okolnosti bohuzel bude. Jde o to, ze se pamet alokuje po blocich a pokud je mez pole prekrocena jen o kousek, tak to projde. Ovsem je tu jiny problem, o kterem jsem uz psal: nikdo nevi co tam je a co se tim prepise. Muze to byt nevyuzite misto a je to v pohode, ale taky to muze byt kus kodu nebo jina data programu a pak je to horsi nez vylet do rise divu...
    Hello world ! Segmentation fault (core dumped)
    3.3.2006 16:00 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Tohle mi funguje spolehlivě :-)
    void main (void) {
            printf ("%d\n", sbrk (0));
            int *p = (int *) malloc (sizeof (int) * 10);
            printf ("%d\n", sbrk (0));
            int *i = (int *) sbrk (0);
            printf ("Tohle je jeste moje\n");
            *(i - 1) = 100;
            printf ("Tohle uz ne a nastane konec :-)\n");
            *i = 100;
    }
    
    Copak toho není dost?
    3.3.2006 16:01 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Ukazatele v C
    Kyosuke to popisuje hned v prvním příspěvku. Paměť je přidělována po stránkách, takže ten program sice píše mimo alokované pole, ale stále do "své" stránky, takže žádný segfault.

    Problém nastane, když se při nějaké další alokaci zabere zbytek té stránky něčím jiným, a volání typu i[55] = 5 to přepíše - pak se program bude chovat zcela nevypočitatelně.
    Quando omni flunkus moritati

    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.