[C]Podivnosti,Was: malloc/free

Hynek Sladky econf na centrum.cz
Čtvrtek Listopad 3 12:14:09 CET 2016


Podle me by melo jit pouzit funkci memmove(), ktera umi kopirovat 
prekryvajici se oblasti...

Hynek


Dne 3.11.2016 11:57, Miroslav Mraz napsal(a):
> A nejen v oblasti mcu. Zrovna včera jsem hledal chybu v jednom 
> projektu - je to jakýsi nástroj pro PLC, jehož historie se zřejmě 
> táhne do časů MSDOS. Tak jsem to chtěl upravit aby to mohlo běžet i v 
> nějakém normálním prostředí (především linux) a narazil jsem - prostě 
> to vyhazovalo chyby. Protože to má celé asi 13000 řádek kódu, chvíli 
> mi trvalo než se podařilo chybu izolovat - ukázalo se, že problém je v 
> knihovní funkci strcpy(char* dest, const char* src), která opravdu do 
> dest uložila něco jiného než bylo původně v src.
> To bylo docela neočekávané, ale stačí se podívat do manuálu - řetězce 
> se nesmí překrývat. A zde je jádro pudla. Ten, kdo nástroj kdysi 
> tvořil prostě na tohle kašlal. Protože "taky to funguje" a ve windows 
> to opravdu funguje. Nedalo mi to se nepodělit, protože upřímně řečeno 
> takhle někdy "prasím" taky. A kdo ne, ať hodí kamenem.
>
> A nevím, zda je to nekompetentnost, lenost nebo se jen věci vyvíjejí a 
> jak už to bývá zvykem, obvykle k horšímu. Protože workaround spočívá v 
> tom, že strcpy() nahradím prostým kopírováním byte po bytu. Což asi 
> původně tak i bylo.
>
> Mrazík

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20161103/c3aad288/attachment.html>


Další informace o konferenci Hw-list