[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