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 11:55 | Komunita

Vývojový tým OpenSSL ve spolupráci s iniciativou Core Infrastructure konsorcia Linux Foundation spustil proces přelicencování této kryptografické knihovny ze současné licence na licenci Apache Licence v 2.0 (ASLv2). Nová licence usnadní začleňování OpenSSL do dalších svobodných a open source projektů. Všichni dosavadní vývojáři OpenSSL (Authors) obdrží v následujících dnech email s prosbou o souhlas se změnou licence.

Ladislav Hagara | Komentářů: 6
včera 01:11 | Komunita

Před třemi týdny Mozilla.cz představila projekt Photon, jehož cílem je návrh a implementace nového vzhledu Firefoxu. Včera zveřejnila první náhled vzhledu Photon. Práce na projektu Photon jsou rozděleny do pěti týmů, které celkem čítají 19 lidí. Zaměřují se na zlepšení prvního spuštění Firefoxu a zaujetí nových uživatelů, celkovou úpravu vzhledu, zlepšení animací, zrychlení odezvy uživatelského rozhraní a také upravení nabídek. Vývoj lze sledovat v Bugzille.

Ladislav Hagara | Komentářů: 22
23.3. 20:00 | Komunita

OneDrive pro firmy je již ve webových prohlížečích na Linuxu stejně rychlý jako na Windows. Microsoft opravil chybu z listopadu loňského roku. OneDrive pro firmy běžel na Linuxu mnohem pomaleji než na Windows. V popisu chyby bylo uvedeno, že stačilo v prohlížeči na Linuxu nastavit v user-agentu Windows a vše se zrychlilo. Odpovědí Microsoftu bylo (Internet Archive: Wayback Machine), že Linux není podporován. Po bouřlivých diskusích na redditu i Hacker News byla chyba nalezena a opravena.

Ladislav Hagara | Komentářů: 4
23.3. 19:00 | Zajímavý projekt

Byla vyhlášena soutěž Hackaday Prize 2017. Soutěž je určena vývojářům open source hardwaru. Pro výherce je připraveno celkově 250 tisíc dolarů. Každý ze 120 finalistů získá tisíc dolarů. Nejlepší pak navíc 50, 30, 20, 15, 10 a 5 tisíc dolarů. Jedná se již o čtvrtý ročník soutěže. V roce 2014 zvítězil projekt globální sítě open source pozemních satelitních stanic SatNOGS. V roce 2015 zvítězil open source systém pro řízení elektrických invalidních vozíků pohybem očí Eyedriveomatic. V roce 2016 zvítězil modulární robot Dtto.

Ladislav Hagara | Komentářů: 0
23.3. 15:00 | Bezpečnostní upozornění

Byla vydána Samba ve verzích 4.6.1, 4.5.7 a 4.4.12. Řešen je bezpečnostní problém CVE-2017-2619. Pomocí symbolických odkazů a souběhu (symlink race) lze "teoreticky" získat přístup k souborům, které nejsou sdíleny. Linuxové distribuce jsou postupně aktualizovány (Debian).

Ladislav Hagara | Komentářů: 0
23.3. 07:43 | Nová verze

Na Steamu se objevil port hry Arma: Cold War Assault (Operation Flashpoint) pro Mac a Linux. … více »

creon | Komentářů: 29
23.3. 05:55 | Nová verze

Po 18 měsících od vydání verze 8.0 byla vydána verze 9.0 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab. Představení nových vlastností v příspěvku na blogu a na YouTube.

Ladislav Hagara | Komentářů: 0
23.3. 03:33 | Komunita

Platnost posledního patentu souvisejícího s Dolby Digital (AC-3) vypršela. Po MP3 se tak do Fedory oficiálně dostane také kodek AC-3.

Ladislav Hagara | Komentářů: 5
23.3. 00:44 | Komunita

Feral Interactive, společnost zabývající se vydáváním počítačových her pro operační systémy macOS a Linux, nabízí své hry na Steamu vývojářům open source 3D grafické knihovny Mesa zdarma. Podmínkou je minimálně 25 commitů za posledních 5 let. Stejnou nabídku dostali vývojáři knihovny Mesa v roce 2015 od Valve. O rok dříve dostali od Valve tuto nabídku vývojáři Debianu a Ubuntu.

Ladislav Hagara | Komentářů: 0
22.3. 23:55 | Nová verze

Opera 44, verze 44.0.2510.857, byla prohlášena za stabilní. Nejnovější verze tohoto webového prohlížeče je postavena na Chromiu 57. Z novinek vývojáři Opery zdůrazňují podporou Touch Baru na nejnovějších MacBoocích Pro (gif). Přehled novinek pro vývojáře na blogu Dev.Opera.

Ladislav Hagara | Komentářů: 1
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (14%)
 (2%)
 (72%)
 (3%)
 (10%)
Celkem 927 hlasů
 Komentářů: 72, poslední 1.3. 11:16
    Rozcestník

    Dotaz: poradi prvku ve strukture v C++

    30.8.2012 10:47 Milan Roubal | skóre: 25
    poradi prvku ve strukture v C++
    Přečteno: 703×
    Narazil jsem vcera na tuto stranku a tak jsem se rozhodl, ze si po dlouhe dobe drobatko zaprogramuju. Bohuzel jsem narazil na drobny problem. Kdyz jsem v reseni jedne ulohy pouzil takovouhle strukturu
    
    typedef struct retezce {
      char retezec[21];
      struct retezce *dalsi;
    } RETEZCE;
    
    tak 6 z 10 testovacich prikladu skoncilo na chybe:
    *** buffer overflow detected ***: /run-1346315753-1140906172/solution terminated
    ======= Backtrace: =========
    /lib/i386-linux-gnu/tls/i686/nosegneg/libc.so.6(__fortify_fail+0x45)[0xb7635dd5]
    /lib/i386-linux-gnu/tls/i686/nosegneg/libc.so.6(+0xfebaa)[0xb7634baa]
    /lib/i386-linux-gnu/tls/i686/nosegneg/libc.so.6(+0xfdedd)[0xb7633edd]
    /run-1346315753-1140906172/solution[0x8048d41]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048ceb]
    /run-1346315753-1140906172/solution[0x8048902]
    /lib/i386-linux-gnu/tls/i686/nosegneg/libc.so.6(__libc_start_main+0xf3)[0xb754f4d3]
    /run-1346315753-1140906172/solution[0x8048a91]
    ======= Memory map: ========
    08048000-0804a000 r-xp 00000000 ca:02 18850134 /run-1346315753-1140906172/solution
    0804a000-0804b000 r--p 00001000 ca:02 18850134 /run-1346315753-1140906172/solution
    0804b000-0804c000 rw-p 00002000 ca:02 18850134 /run-1346315753-1140906172/solution
    09240000-0b406000 rw-p 00000000 00:00 0 [heap]
    b729f000-b74eb000 rw-p 00000000 00:00 0
    b74eb000-b7507000 r-xp 00000000 ca:01 394527 /lib/i386-linux-gnu/libgcc_ ...
    
    pokud jsem ale poradi prvku v teto strukture otocil,
    
    typedef struct retezce {
      struct retezce *dalsi;
      char retezec[21];
    } RETEZCE;
    
    
    tak je vysledek dobre pro vsechny testovana data.

    Co tedy presne ta chybova hlaska znamena a proc zrovna otoceni prvku v te strukture to resi? Kdybych si ten ukazatel prepisoval, tak by mi ten program nefungoval vubec, tim to nebude.

    Řešení dotazu:


    Odpovědi

    30.8.2012 10:58 George O.
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Chyba je zcela urcite v kodu, ktery nemame k dispozici. V c/c++ Muzes mit chybu treba na 250. radku a projevit se muze az o par tisic radku dal. Muze se objevovat relativne nahodne, tak jako ted tobe:-) Takze ukaz zdrojak a my na to mrknem:-)
    30.8.2012 11:05 Milan Roubal | skóre: 25
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    jeste bych dodal, ze NEVIM, ktera data to dokazou schodit. Vsechny testovaci priklady, ktere jsem schopen ja sam vymyslet, tak projdou na domacim pocitaci korektne.
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
    
    using namespace std;
    
    typedef struct pismena {
      int pocet[256];
      struct pismena *next[256];
    } PISMENA;
    
    typedef struct retezce {
      char retezec[21];
      struct retezce *dalsi;
    } RETEZCE;
    
    typedef struct vysledek {
      //int pole[300000];
      retezce *next[300001];
      retezce *last[300001];
    } VYSLEDEK;
      
    void store(pismena *memory, char *line, int length) {
      if(length == 1) {
        memory->pocet[line[0]]++;
        return;
      }
      if(memory->next[line[0]] == NULL) {
        memory->next[line[0]] = (PISMENA *) malloc(sizeof(PISMENA));
        for(int i=0; i<256; i++) {
          memory->next[line[0]]->pocet[i] = 0;
          memory->next[line[0]]->next[i] = NULL;
        }
      }
      store(memory->next[line[0]], line + 1, strlen(line + 1));
    }
    
    void uloz(VYSLEDEK *vysled, int kam, char* co) {
      retezce *retez = (RETEZCE *) malloc(sizeof(RETEZCE));
      retez->dalsi = NULL;
      strcpy(retez->retezec, co);
    /*  cout << "co ";
      cout << co;
      cout << '\n';*/
      if(vysled->next[kam] == NULL) {
        vysled->next[kam] = retez;
        vysled->last[kam] = retez;
      } else {
        vysled->last[kam]->dalsi = retez;
        vysled->last[kam] = retez;
      }
    } 
    
    void search(VYSLEDEK *vysled, PISMENA *memory, char *max, int depth, char *curr) {
      for(int i=32; i<256; i++) {
        curr[depth] = (char)i;
        curr[depth + 1] = '\0';
        if(memory->pocet[i] > 0) {
          uloz(vysled, memory->pocet[i], curr);
          //strcpy(max, curr);
        }
        if(memory->next[i] != NULL) {
          search(vysled, memory->next[i], max, depth + 1, curr);
        }
      }
    }
    
    void remove(PISMENA *memory, char *max) {
      if(strlen(max) == 1) {
        memory->pocet[max[0]] = 0;
      } else {
        remove(memory->next[max[0]], max + 1);
      }
    }
        
    int main (void) {
        int total;
        cin >> total;
        char line[21];
        char max[21];
        char curr[21];
        int maxval;
        PISMENA *memory = (PISMENA *) malloc(sizeof(PISMENA));
        for(int i=0; i<256; i++) {
          memory->pocet[i] = 0;
          memory->next[i] = NULL;
        }
        for(int i=0; i < total; i++) {
          cin >> line;
          store(memory, line, strlen(line));
        }
        int k;
        cin >> k;
        /*
        for(int i=0; i < k; i++) {
          max[0] = '\0';
          curr[0] = '\0';
          maxval = 0;
          search(memory, max, &maxval, 0, curr);
          cout << max;
          cout << '\n';
          remove(memory, max);
        }
        */
        VYSLEDEK *vysled = (VYSLEDEK *) malloc(sizeof(VYSLEDEK));
        max[0] = '\0';
        curr[0] = '\0';
        maxval = 0;
        for (int i=0; i<300000; i++) {
          vysled->next[i] = NULL;
          vysled->last[i] = NULL;
        }
        search(vysled, memory, max, 0, curr);
        int counter = 0;
        int pos = 300000 - 1;
        while(pos >= 0) {
       /*   cout << "pos ";
          cout << pos;
          cout << '\n';*/
          if(vysled->next[pos] != NULL) {
    	RETEZCE *ret = vysled->next[pos];
    	while(ret != NULL) {
    	  cout << ret->retezec;
    	  cout << '\n';
    	  counter++;
    	/*  cout << counter;
    	  cout << '\n';*/
    	  if (counter == k) {
    	    
    	   /*   cout << "koncim\n";*/
    	    /*while(true) {
    	     }*/
    	    exit(0);
    	  }
    	  if (ret != vysled->last[pos]) {
    	    ret = ret->dalsi;
    	  } else {
    	    ret = NULL;
    	  }
    	}
          }
          pos--;
        } 
    }
    
    Pro jistotu jeste kompletni zadani:
    Frequency Counting of Words / Top N words in a document.
     
    Given N terms, your task is to find the k most frequent terms from given N terms.
     
    Input format :
     
    First line of input contains N, denoting the number of terms to add.
    In each of the next N lines, each contains a term.
    Next line contains k, most frequent terms.
     
    Output format :
     
    Print the k most frequent terms in descending order of their frequency. If two terms have same frequency print them in lexicographical order.
     
    Sample input :
     
    14
    Fee
    Fi
    Fo
    Fum
    Fee
    Fo
    Fee 
    Fee
    Fo
    Fi
    Fi
    Fo
    Fum
    Fee
    3
     
    Sample output :
     
    Fee
    Fo
    Fi
     
    Constraint :
    0 < N < 300000 
    0 < term length < 20.
    
    30.8.2012 12:04 segfault
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Co treba slova delsi nez 20 pismen?
    30.8.2012 12:17 Milan Roubal | skóre: 25
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    posledni radek v zadani je
    0 < term length < 20
    
    tedy slova delsi nez 20 znaku nejsou povolena.
    Řešení 1× (Jan Trávníček)
    30.8.2012 12:24 Kit
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    To znamená, že je nutné vložit do testovacích dat i slova delší než 20 znaků a aplikace si s tím musí umět poradit.
    31.8.2012 13:56 Milan Roubal | skóre: 25
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    no vypada to tak, ze skutecne vstup obsahuje 22znakove slovo, coz je v rozporu se zadanim.
    3.9.2012 19:58 Milan Roubal | skóre: 25
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Tak po mem dotazu bylo zadani opraveno, nove je v podminkach
    0 < term length < 25
    Podle vysledku jsem asi motivoval i par lidi, aby si to take vyzkouseli :)
    3.9.2012 21:15 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Doufám, že si aspoň uvědomujete, že to na podstatě problému vůbec nic nemění.
    3.9.2012 21:56 Milan Roubal | skóre: 25
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Jo, v tom problem neni. Kazdy program ma nejake omezujici podminky na vstupy, bez nich se programovat neda. Podle nich se voli jak algoritmus, tak datove struktury. A pokud testovaci server dokaze vratit pouze Passed nebo Wrong, tak se kontrola vstupu ani nijak naprogramovat neda, nebot pri nesplneni podminek bude vzdycky jedinym vystupem vysledek Wrong. Nebo nejaky napad, jak tu kontrolu vstupu v tomto konkretnim pripade naprogramovat, aby byla nejak uzitecna?

    Souhlasim, ze pad programu neni dobry. Ale skoro bych rekl, ze jsem mel kliku, ze se mi ten error objevil, protoze maji ve FAQ uvedeno
    All runtime errors (segfaults, stack overflows, uncaught exceptions, etc) will also show up as 'Wrong answer'
    . Pokud by se objevila pouze odpoved Wrong answer, tak bych na to, ze to ten server testuje vstupem mimo rozsah zadani, asi nikdy neprisel.

    Mozna, ze se znalost tohoto triku, tedy ze server muze vratit nejen Passed nebo Wrong, ale i behovou chybu, bude hodit v nekterem z pristich pokracovani oblibeneho podrate.cz

    4.9.2012 16:32 segfault
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Zrovna v c++ není problém ten program napsat tak, aby akceptoval libovolně dlouhá slova (do velikosti dostupné paměti). Byl by pak i hezčí. Přiložené řešení dost ošklivě porušuje pravidlo 0-1-∞ ( http://www.catb.org/jargon/html/Z/Zero-One-Infinity-Rule.html ).
    3.9.2012 21:55 Kit
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Obávám se, že to opravili chybně. Měli to tak nechat, aby rozpoznali programátory, kteří umí pracovat s chybovými stavy. Když přece dám vstupní limit 20 znaků, musím předpokládat, že mi jich tam někdo narve 50 nebo více a program na tom nesmí zkolabovat.

    Nehledě k tomu, že těch 20 znaků může být v UTF-8 i na více než 22 bytech.
    3.9.2012 22:02 Milan Roubal | skóre: 25
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Tady se ale pracuje v prostredi automaticke testovaci masiny, ktera musi nejak rozhodnout. A ta jejich masina tedy neakceptovala v pripade vstupu mimo rozsah ukonceni programu s nenulovou hodnotou jako korektni reseni :)
    4.9.2012 07:02 l4m4
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Pokud bereš segfault jako ukončení programu s nenulovou hodnotou, tak doufám, že neprogramuješ nic, co by používali ostatní lidé.
    30.8.2012 11:18 rastos | skóre: 60 | blog: rastos
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Môj tip: Ten prvok, ktorý je prvý v prípade kedy to funguje, niekde pretečie. A prepíše tak dáta v nasledujúcich prvkoch. Ale nevyletí to mimo pamäť zabranú štruktúrou. Naopak ak je ten prvok neskôr, tak rovnako pretečie, ale tentokrát už mimo tvoju štruktúru a spôsobí neplechu.

    Pusti to pod debuggerom a uvidíš.
    30.8.2012 11:24 Milan Roubal | skóre: 25
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    problem je, ze u me doma to nespadne nikdy. Spadne to na jejich validacnim serveru s jejich testovacima datama, ktera ja neznam. Takze bohuzel debugger se pouzit v tomto pripade neda.
    30.8.2012 11:09 kuka
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Otoceni prvku obecne nic neresi, je nahoda, ze to pak "funguje" - bez konkretniho kodu tezko rict, proc zrovna pro nej se chyba neprojevi. Napriklad si muzes prepsat byte, ktery je nula, zase na nulu, a vsechno funguje.
    30.8.2012 11:35 l4m4
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Než hledat chybu, celé to zahoď a použij na počítání výskytů hashovou tabulku std::unordered_map. Výsledný program bude mít tak 20 řádků (pořád víc než two-liner v Pythonu, ale už přijatelně).
    30.8.2012 12:28 Milan Roubal | skóre: 25
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    diky za radu. Me jde spise o to pochopit, co presne znamena ta hlaska *** buffer overflow detected *** v jakych situacich muze nastat a kdo ji detekuje. Tedy tahle hlaska se da vygenerovat pouze zapisem / ctenim pameti, ktera nepatri tomu procesu a generuje ji jadro? Nebo muze byt vygenerovana i pri jinych situacich jako je dereferencovani NULL pointeru?
    30.8.2012 22:01 l4m4
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Buffer overflow detected vypisuje při detekci chyby libc, je-li program zkompilován s -D_FORTIFY_SOURCE=2, což znamená přidáni extra kontrol chyb přetečení mezí. Hláška se v principu může objevit i práci s pamětí, která procesu všechna patří, protože funkce typu strcmp() nemůže dostat ke zpracování úsek paměti, který je součástí více nezávislých alokací, jakkoli je spojitý.

    Další obecná rada, když to nechceš napsat inteligentně: spouštěj to pod valgrindem. Nejspíš najdeš spoustu chyb i se vstupy, se kterými program viditelně nepadá.
    31.8.2012 13:55 Milan Roubal | skóre: 25
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    vyborne, -D_FORTIFY_SOURCE=2 mi ukazalo, kde hledat skutecnou chybu. Zacal jsem tedy zvedat velikost ciloveho bufferu a pri hodnote 23 misto 21 to uz prestane tuto chybu hlasit. Tedy vstupni data na jejich serveru nesplnuji podminky zadani. Proc tu na tu stejnou chybu ale neskoncilo i to otoceni tech prvku ve strukture? Zatim si to vysvetluji tak, ze ta struktura byla interne zarovnana na 4bajty, a tedy
    
    typedef struct retezce {
      struct retezce *dalsi;
      char retezec[21];
    } RETEZCE;
    je pote alokovano stejne jako
    
    typedef struct retezce {
      struct retezce *dalsi;
      char retezec[24];
    } RETEZCE;
    
    a pak tato chyba neni odchycena. Nebo se mylim?
    31.8.2012 14:09 Kit
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Vstupní data mají správně. Tvůj program si musí umět poradit i s nestandardním vstupem.
    1.9.2012 01:09 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++

    Ano, to zarovnání je dost pravděpodobné.

    Podstatné je ale něco úplně jiného: pokud chcete někdy programovat i něco jiného než jen umělé školní příklady, ve vlastním zájmu co nejrychleji zapomeňte na přístup "To, že mi program padá, je chyba nekorektních vstupních dat, program je v pořádku." Čtete-li data od uživatele, ze souboru nebo po síti, musíte počítat s tím, že nemusejí splňovat formální požadavky, a váš program se s tím musí v mezích možností rozumně vypořádat. A ne, segfault není rozumné vypořádání se.

    30.8.2012 12:04 George O.
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Mel jsem vuli se na to podivat, ale ty cesko/anglicke nazvy promennych a funkci navic i naprosto zcestne nazvy jako napr "next" pro array, misto toho, ze by clovek cekal next referenci na ten samy objekt mi znemoznuji to pochopit a odladit v nejake rozumne dobe...
    Řešení 1× (Milan Roubal (tazatel))
    30.8.2012 12:05 George O.
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Kazdopadne typuju preteceni bufferu pomoci zradne funkce strcpy :-)
    30.8.2012 12:45 Milan Roubal | skóre: 25
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    vyborne, zasah. nahrazeni funkce strcpy funkci strncpy problem buffer overflow resi.
    30.8.2012 12:57 George O.
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    strcpy je nebezpecna funkce. Zadne kopirovani, alokovani, atd., kde nemas veskere velikosti pod kontrolou, neni bezpecne:-)
    30.8.2012 13:26 kuka
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    Nicmene chybu tam pravdepodobne stale mas, strncpy te pouze "zachranilo" od dopadu nepredpokladane delky nejakeho retezce nebo neexistence jeho ukoncovaciho null znaku, ktery mohlo neco prepsat apod.
    30.8.2012 13:46 George O.
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    A prave v pripade kopirovani delsiho retezce, nez je cilovy buffer, se mohlo stat to, ze doslo k prepsani vrcholu stacku ukoncovaci nulou a pri zavolani instrukce RET to odskocilo na libovolne misto v pameti a udelalo to, co to udelalo... Tak proc tam nutne hledat jeste jinou chybu? Nikdo nerekl, ze tam nemuze byt, samozrejme, ale neni zatim zadny logicky duvod ji hledat, dokud o sobe nerekne sama :-)))
    30.8.2012 14:44 kuka
    Rozbalit Rozbalit vše Re: poradi prvku ve strukture v C++
    No jiste. A v tom prave spociva ta chyba, ze se nekde kopiruje to, co nema. To muze mit radu pricin, napr. chybi kontrola neceho na vstupu, doslo k prepsani null znaku na konci nejakeho retezce apod. A je velmi logicke takovy problem hledat, protoze zkracenim nejakeho retezce pomoci strncpy se sice zabranilo spadnuti (nebo hure zneuziti - ze chybny program spadne je celkem pohodovy stav, horsi je, kdyz umozni spustit zavadny kod apod.), ale vecne to spravne byt nemusi - ucelem programu nebyva, aby pouze nespadl:-).

    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.