[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