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 22:44 | Nová verze

    Programovací jazyk Python byl vydán v nové major verzi 3.15.0. Podrobný přehled novinek v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 2
    včera 22:33 | Zajímavý projekt

    BIGWORDS.PAGE je open-source webová aplikace, která po otevření odkazu v prohlížeči vykreslí přes celou obrazovku jednoduché informační sdělení. Zpráva i její nastavení jsou uložené v části URL za znakem #, například odkaz https://bigwords.page/#abclinuxu zobrazí jako velký bílý nápis 'abclinuxu' na černém pozadí. Obsah odkazu lze upravovat i vestavěným editorem, ten umožňuje nastavovat formátování a vizuální efekty textu, časovače, QR kódy a obrázky. Zdrojový kód je dostupný pod licencí MIT na GitHubu.

    ❗Červivý Hřib krade❗ | Komentářů: 8
    včera 11:55 | Upozornění

    V neděli 11. října proběhne rotace klíče kořenové zóny. Podruhé v historii. Ondřej Filip na blogu CZ.NIC: "Pokud je pro Vás DNS protokol spíše výzva, ale přesto spravujete nějakou síť či DNS resolver, zkuste si jednoduchý test, který připravila firma Cloudflare na této adrese. Obzvláště zbystřit byste měli, pokud uvidíte nějaká červená políčka."

    Ladislav Hagara | Komentářů: 13
    včera 09:55 | IT novinky

    Vláda Spojených států se rozhodla vyřadit americkou softwarovou společnost Microsoft a několik dalších velkých technologických podniků z programu, který umožňuje kvalifikovaným zahraničním pracovníkům získat povolení k trvalému pobytu. Oznámila to včera administrativa amerického prezidenta Donalda Trumpa. Opatření zdůvodnila rozsáhlým zneužíváním programu, který je dlouhodobě terčem kritiky ze strany Trumpových příznivců, neboť prý znevýhodňuje americké pracovníky.

    Ladislav Hagara | Komentářů: 11
    včera 09:44 | IT novinky

    Datové centrum největší ruské technologické společnosti Jandex v Rjazaňské oblasti se stalo cílem dronového útoku a zastavilo provoz. Jandexu se někdy přezdívá „ruský Google“. Provozuje nejoblíbenější internetový vyhledávač v Rusku nebo aplikace pro objednávky jídla a taxi. Využívají jej desítky milionů lidí v rusky mluvících zemích.

    Ladislav Hagara | Komentářů: 11
    včera 09:33 | Nová verze

    Francouzská společnost Mistral AI představila Mistral Large 4 (interně přezdívaný 'le Chonk', volně přeloženo 'pořádný macek'), 'open-weight multimodální hybridní instruct-and-reasoning model s architekturou granulárního MoE, nativně podporující více jak 160 jazyků'. Model má přes jeden bilión parametrů, z nichž při práci využívá 49 miliard, kontextové okno o délce milion tokenů a obrazový enkodér o 1,6 miliardách parametrů.

    … více »
    ❗Červivý Hřib krade❗ | Komentářů: 2
    včera 03:22 | Nová verze

    Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.20. Díky 227 přispěvatelům.

    Ladislav Hagara | Komentářů: 0
    včera 03:11 | Komunita

    Simon Long oznámil Raspberry Pi Desktop pro PC a Mac s Intelem postavený na aktualizovaném Debianu 13 Trixie. S klientem Raspberry Pi Connect pro vzdálenou správu. Ke stažení je vedle Raspberry Pi OS pro Raspberry Pi.

    Ladislav Hagara | Komentářů: 1
    8.10. 21:33 | Zajímavý projekt

    ESP32-C3 adblock přemění lacinou vývojovou desku ESP32‑C3 na samostatný DNS blokovač nejenom reklamních domén, minimalistickou alternativu k populárnímu Pi-hole. ESP32-C3 adblock místo objemných názvů domén ukládá jejich 40-bitové FNV-1a hashe do flash paměti, které pak binárně prohledává, kontrola jedné domény trvá přibližně 10 milisekund. Blocklist pojme až 537 tisíc domén a lze jej spravovat přes webové rozhraní. Projekt zatím

    … více »
    ❗Červivý Hřib krade❗ | Komentářů: 0
    8.10. 21:00 | Zajímavý software

    ArtCraft je sada open source aplikací pro práci s obrázky a videi "inspirovaných" aplikacemi od Adobe. Napsaných v Rustu. Pro MacOS, Windows i Linux. Běží také ve webovém prohlížeči. Aktuálně se jedná o 7 aplikací: PhotoCraft (Photoshop), VectorCraft (Illustrator), FilmCraft (Premiere Pro), LightCraft (Lightroom), PdfCraft (Acrobat), EffectCraft (After Effects) a DesignCraft (InDesign). Zdrojové kódy jsou k dispozici na GitHubu.

    Ladislav Hagara | Komentářů: 10
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2826 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník
    Štítky: není přiřazen žádný štítek

    Dotaz: Ako osetrit pretecenia buffera v C?

    Tombik avatar 6.3.2010 18:39 Tombik | skóre: 12
    Ako osetrit pretecenia buffera v C?
    Přečteno: 869×
    Dobry vecer,

    Mam napriklad funkciu:
    
    int sucetPrvkovPola(int *x,int k)
    {
        int i,s=0;
        
        for(i=0; i<k; i++)
        {
    	s=s+x[i];
        }
    
        return s;
    }
    
    
    Napriklad ked sa program pokusi scitat dva prvky s hodnotami 2 000 000 000 a napriklad 2 000 500 000 co dava spolu vacsiu hodnotu ako je rozsah integeru. Vtedy by mala funkcia skoncit s chybovym hlasenim. Neviem si s tym poradit.

    Dik

    Řešení dotazu:


    Odpovědi

    6.3.2010 18:56 kovariadam | skóre: 12 | blog: biased | Košice/Brno
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Tombik avatar 6.3.2010 19:05 Tombik | skóre: 12
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Ano pomocou INT_MAX som to skusal lenze akonahle vznikne vacsia hodnota ako INT_MAX tak do premennej "s" sa zapise zaporna hodnota. Pritom ale v tom poli mozu byt aj zaporne hodnoty (treba to osetrit aj pre pripad ked hodnota bude mensia ako INT_MIN).

    Neviem teda ako to mam pouzit.
    6.3.2010 19:28 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Tak to při výpočtu uložit do proměnné třeba 64bit a pak testovat na rozsah 32bitu. Jinak na x86 se na strojové úrovni při přetečení tuším nastaví příznak OF.
    Tombik avatar 6.3.2010 19:32 Tombik | skóre: 12
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Dik za radu v programovani som zaciatocnik moc nerozumiem tomu ako to myslis....nemozes byt troska konkretnejsi?
    Řešení 1× (Tombik (tazatel))
    6.3.2010 19:41 kovariadam | skóre: 12 | blog: biased | Košice/Brno
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Napríklad si vytvoriť premennú s ako long a tú testovať na INT_MAX a INT_MIN.
    6.3.2010 19:47 kovariadam | skóre: 12 | blog: biased | Košice/Brno
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Alebo ak si na 32bitotvej platforme, tak ako long long int a kompilovať to s voľbou -std=c99.
    Tombik avatar 6.3.2010 19:48 Tombik | skóre: 12
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Diky
    Řešení 1× (Tombik (tazatel))
    6.3.2010 21:46 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    To je zase snůška nesmyslů.

    Za prvé se tomu neříká přetečení bufferu ale přetečení číselného rozsahu.

    Za druhé - "detekci přetečení uděláme tak, že použijeme číslo s větším rozsahem" - wtf? A jak byste pánové chtěli detekovat přetečení long longu? "To nejde"?

    Doporučuju si přečíst např. secure coding, je tam toho o něco víc než jen čísla. Ale pro ty netrpělivé:

    Varianta 1:
    int a,b ... 
    if ((a > 0) && (b > 0) && (INT_MAX - a > b)) printf("a+b pretece");
    if ((a < 0) && (b < 0) && (a < INT_MIN - b)) printf("a+b podtece");
    
    Varianta 2:
    int a,b ...
    int c = a+b;
    if ((a > 0) && (c < b)) printf("a+b preteklo");
    if ((a < 0) && (c > b)) printf("a+b podteklo");
    
    In Ada the typical infinite loop would normally be terminated by detonation.
    6.3.2010 22:29 kovariadam | skóre: 12 | blog: biased | Košice/Brno
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    A jak byste pánové chtěli detekovat přetečení long longu? "To nejde"?
    No predsa long long longom... :P
    Fuky avatar 7.3.2010 00:35 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?

    Catching Integer Overflows in C
    Here is a complete set of three functions for ``careful'' addition, subtraction, and multiplication.:

    #include <stdio.h>
    #include <limits.h>
    
    int
    chkadd(int a, int b)
    {
    	if(b < 0)
    		return chksub(a, -b);
    	if(INT_MAX - b < a) {
    		fputs("int overflow\n", stderr);
    		return INT_MAX;
    	}
    	return a + b;
    }
    
    int
    chksub(int a, int b)
    {
    	if(b < 0)
    		return chkadd(a, -b);
    	if(INT_MIN + b > a) {
    		fputs("int underflow\n", stderr);
    		return INT_MIN;
    	}
    	return a - b;
    }
    
    int
    chkmul(int a, int b)
    {
    	int sign = 1;
    	if(a == 0 || b == 0) return 0;
    	if(a < 0) { a = -a; sign = -sign; }
    	if(b < 0) { b = -b; sign = -sign; }
    	if(INT_MAX / b < a) {
    		fputs("int overflow\n", stderr);
    		return (sign > 0) ? INT_MAX : INT_MIN;
    	}
    	return sign * a * b;
    }
    
    7.3.2010 07:25 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    		return chksub(a, -b);
    epic fail!
    In Ada the typical infinite loop would normally be terminated by detonation.
    Fuky avatar 7.3.2010 12:20 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Prosím, víc rozepiš co se Ti nezdá, já si myslím, že je to v naprostém pořádku.
    7.3.2010 12:37 Jirka P
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Nápověda (myslím dost explicitní): Nekonečná rekurze.
    Fuky avatar 7.3.2010 12:53 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Z chkadd() se volá chksub(a, -b) pouze, když je b záporné číslo. Tedy v chksub() se nemůže zavolat chkadd(a, -b), protože ze záporného b se udělalo kladné, tedy žádná nekonečná rekurze se nekoná. Pokud si někdo myslí opak, uveďte konkrétní příklad, možná se na to jen nedívám z dostatečného odstupu a stále mi něco uniká. ;-)
    7.3.2010 13:27 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    main() {int i = -2147483648; printf ("%x %x %s\n", i, (-i), (i == -i)?"pooh":""); }
    
    To je svinské číslo, které je záporné, i když se z něj veme absolutní hodnota :) Holt matematika a numerická matematika jsou dvě různé věci, s floating point čísly je to ještě horší.
    In Ada the typical infinite loop would normally be terminated by detonation.
    7.3.2010 12:48 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Je dost důležité, aby v samotné kontrole přetečení nedošlo k přetečení. Rozsah záporných a kladných čísel není symetrický (a nikdo nikdy neřekl že by měl být). Takže pokud uděláte -b, tak nemáte zaručeno že nedošlo k přetečení.

    V běžné reprezentaci kladných/záporných čísel, kterou mj. používá architektura x86(-64), může dojít k přetečení pro nejmenší reprezentovanou hodnotu (-2n-1 kde n je počet bitů reprezentace). A zrovna v kombinaci s tímto kódem dojde i k té nekonečné rekurzi, jak tu někdo naznačoval.
    In Ada the typical infinite loop would normally be terminated by detonation.
    Fuky avatar 7.3.2010 13:01 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Dík za vysvětlení, hlavně, že jsem o nesymetrii včera četl v tom článku a dneska čučím do kódu a vůbec mi to nedošlo. ;-)
    Fuky avatar 7.3.2010 13:09 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?

    Ach ta nepozornost, hlavně, že mají před začátkem kódu poznámku:

    (Note: these functions all share one bug: they may fail if invoked on the largest negative integer, INT_MIN.)

    7.3.2010 13:28 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    To je poznámka typu: můj kód je dobrý asi jako čínské pivo...
    In Ada the typical infinite loop would normally be terminated by detonation.
    AraxoN avatar 7.3.2010 11:00 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Mňa na tom celom zaráža to, že sa to robí takto dookola. Na procesore x86 je už od vzniku tejto architektúry overflow flag, ktorý sa nastaví správne po každej aritmetickej operácii a inštrukcia INTO, ktorá potom spraví interrupt ak došlo k pretečeniu. Malo by stačiť povedať prekladaču, aby tam tú inštrukciu INTO dával a bolo by to vyriešené...
    7.3.2010 11:05 l4m4
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Muselo by to ale jít vypnout pro konkrétní bloky kódu, které s přetečením počítají.
    AraxoN avatar 7.3.2010 11:15 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Cez direktívu #pragma, alebo cez špeciálny symbol prekladača, ako je __builtin_expect() v GCC...
    7.3.2010 11:41 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Myslím, že to into asi nebude to pravé ořechové, protože by to znamenalo přepnutí kontextu. Teoreticky by pak jádro mohlo poslat nějaký signál, ale, "uh". IMHO na to stačí klasický jump on overflow, ale bohužel (asi kvůli multiplatformnosti) to tak nedělají ani překladače které by měly přetečení poznat.
    In Ada the typical infinite loop would normally be terminated by detonation.
    7.3.2010 14:37 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Za druhé - "detekci přetečení uděláme tak, že použijeme číslo s větším rozsahem" - wtf? A jak byste pánové chtěli detekovat přetečení long longu? "To nejde"?
    V zadání se sčítaly tuším dva 32bit integery, mám takový dojem, že při sečtení se 64bit limit nikdy nepřekročí :-P.
    Aetos avatar 7.3.2010 07:01 Aetos | skóre: 13
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Vím, že problém je už vyřešen, ale co to řešit tak, jak to řeší všichni. Mám na mysli kalkulačku. Když je hodnota větší než ... tak jí zapíše/uloží/zobrazí jako mantisu a exponent;-)
    7.3.2010 10:47 l4m4
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    A syscallu, který chce integer, to budeš předávat jak?
    8.3.2010 11:26 zulu
    Rozbalit Rozbalit vše Re: Ako osetrit pretecenia buffera v C?
    Takže můžeš sčítat do nekonečna? To máš skvělou kalkulačku.

    Založit nové vlákno • Nahoru

    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.