abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

    Ladislav Hagara | Komentářů: 0
    dnes 04:11 | Nová verze

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    včera 22:44 | IT novinky

    IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.

    Ladislav Hagara | Komentářů: 6
    včera 15:55 | Nová verze

    Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | IT novinky

    Oznámeny byly nové Raspberry Pi Compute Module 4S. Vedle původní 1 GB varianty jsou nově k dispozici také varianty s 2 GB, 4 GB a 8 GB paměti. Compute Modules 4S mají na rozdíl od Compute Module 4 tvar a velikost Compute Module 3+ a předchozích. Lze tak provést snadný upgrade.

    Ladislav Hagara | Komentářů: 0
    včera 04:44 | Nová verze

    Po roce vývoje od vydání verze 1.24.0 byla vydána nová stabilní verze 1.26.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.26.

    Ladislav Hagara | Komentářů: 0
    včera 04:33 | Nová verze

    Byla vydána nová verze 6.2 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.14.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Nová verze

    Byla vydána nová verze 30.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí JavaScriptu, HTML a CSS Electron (Wikipedie, GitHub). Chromium bylo aktualizováno na verzi 124.0.6367.49, V8 na verzi 12.4 a Node.js na verzi 20.11.1. Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.

    Ladislav Hagara | Komentářů: 2
    včera 04:11 | Nová verze

    Byla vydána nová verze 9.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 220 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (72%)
     (9%)
     (2%)
     (17%)
    Celkem 737 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    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: 772×
    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: 72 | 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: 62 | 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: 72 | 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.