[C]Podivnosti,Was: malloc/free

Miroslav Mraz mrazik na volny.cz
Čtvrtek Listopad 3 13:19:52 CET 2016


Ono je to úplně jedno, ten projekt zůstane i tak dost vachrlatý, nakonec 
i to strcpy() by tak být nemělo, lepší by bylo strncpy(), ale je to 
použito 140x a pouze ve 2 případech se řetězce skutečně překrývaly. 
Stejně tak tam je asi 60x sprintf() ale proč to nahrazovat snprintf() 
když to chodí...
A jiné. Hrabat se ve starých věcech je hrozná práce. Mě na tom spíš 
vadilo, že každá verze Visual Studia se k tomu postavila úplně jinak a 
vyhazovala varování na jiných místech. Což sice platí i pro gcc, ale na 
to jsem už zvyklý. Prostě jsem časem odvykl windows a v tom Visual 
Studiu se mi blbě dělá.

Mrazík

Dne 3.11.2016 v 12:44 Josef Štengl napsal(a):
> Ano memmove umožnuje kopírování i překrývajících se oblastí. Jestli
> funkce umožňuje kopírování nebo přesun překrývajících se oblastí záleží
> v C na implementaci funkce. Běžně nebývají.
>
> Pokud máte novější kompilátor, je v prototypech knihovních funkcí
> uvedeno klíčové slovo restrict u parametru s ukazatelem. To říká, že se
> předpokládá, že se oblasti zájmů (tedy dat, objektů) nebudou pro zápis
> překrývat a kompilátor může použít agresivnější optimalizaci. Pokud se
> budou překrývat je chování nedefinováno. Fce strcpy() je zrovna
> příkladem s použitím restrict. Ve vašem případě nikdo nebyl varován :-)
>
>
>
> Dne 3.11.2016 v 12:14 Hynek Sladky napsal(a):
>> Podle me by melo jit pouzit funkci memmove(), ktera umi kopirovat
>> prekryvajici se oblasti...
>>
>> Hynek


Další informace o konferenci Hw-list