[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