( TCH | 2020. 09. 25., p – 14:49 )

> Í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.