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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 01:02 | Zajímavý článek

Minulý týden byly vydány verze 1.2.3 a 1.1.7 webového poštovního klienta Roundcube. V oznámení o vydání bylo zmíněno řešení bezpečnostního problému nalezeného společností RIPS a souvisejícího s voláním funkce mail() v PHP. Tento týden byly zveřejněny podrobnosti. Útočník mohl pomocí speciálně připraveného emailu spustit na serveru libovolný příkaz. Stejně, jak je popsáno v článku Exploit PHP’s mail() to get remote code execution z roku 2014.

Ladislav Hagara | Komentářů: 0
včera 16:00 | Nová verze

Byla vydána verze 0.98 svobodného nelineárního video editoru Pitivi. Z novinek lze zmínit například přizpůsobitelné klávesové zkratky. Videoukázka práce s nejnovější verzí Pitivi na YouTube.

Ladislav Hagara | Komentářů: 1
včera 15:00 | Zajímavý software

Stop motion je technika animace, při níž je reálný objekt mezi jednotlivými snímky ručně upravován a posouván o malé úseky, tak aby po spojení vyvolala animace dojem spojitosti. Jaký software lze pro stop motion použít na Linuxu? Článek na OMG! Ubuntu! představuje Heron Animation. Ten bohužel podporuje pouze webové kamery. Podpora digitálních zrcadlovek je začleněna například v programu qStopMotion.

Ladislav Hagara | Komentářů: 3
7.12. 21:21 | Nová verze Ladislav Hagara | Komentářů: 0
7.12. 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 2
7.12. 00:10 | Nová verze

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 8
6.12. 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 27
6.12. 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
5.12. 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 50
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (8%)
 (5%)
 (3%)
Celkem 799 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

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: 699×
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.