[C]Podivnosti,Was: malloc/free
Miroslav Mraz
mrazik na volny.cz
Čtvrtek Listopad 3 11:57:01 CET 2016
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
Dne 3.11.2016 v 10:13 Jan Waclawek napsal(a):
>
>> taky to funguje
>
> Ano, toto je klasicky priznak nekompetentnosti v oblasti mcu.
>
>
> wek
Další informace o konferenci Hw-list