> Írhatsz te inicializálatlan területre is, van rá esély, hogy észre sem veszed. Az esetek egy részében jól is működik a program. Csak egy karakterrel írom túl, stb.
Persze, mert lapokat kapsz, nem byte-okat. De ez nem jó működés, hanem mázli. Legközelebb meg simán összedől, mint fél disznó az ólban.
> Vagy egy felszabadított pointer helyére. Ezért nincs semmi értelme a NULL check-nek,
Vagyis szerinted ez a helyes kód:
int valami(char *input, size_t len)
{
char *kecske;
kecske = malloc(len);
strncpy(kecske, input, len);
// TODO: something with kecske
return 0;
}
ez helyett?
int valami(char *input, size_t len)
{
char *kecske;
kecske = malloc(len);
if (kecske == NULL)
{
return 1;
}
strncpy(kecske, input, len);
// TODO: something with kecske
return 0;
}
> KIVÉVE akkor (amint más már említette), ha a programozó betartja, hogy az inicializálatlan pointereket NULL-ra állítja. Én mondjuk így szoktam.
Én is (ha el nem felejtem :P).
> Az ilyen egyszerű hibák felfedésére vannak sokkal jobb toolok, mint pl. a Valgrind. Na az alól sokkal kevésbé lehet kibújni, ő mindent ellenőriz. De megnézheted, hogy mekkora performance hit, emlékeim szerint kb. tízszeres szokott lenni.
Nem Valgrind szintű ellenőrzésre gondoltam, könyörgöm. Ld. a kódot.