( NevemTeve | 2013. 01. 18., p – 14:07 )

+1 lehetőség:
elágazás a méret szerint, kis méretnél lokális változó, nagyobbnál malloc; értelemszerűen a végén csak akkor kell felszabadítás, ha volt malloc. (Ja, és a 'függvény közepéből return' dolgot hanyagoljuk, ronda gányolás;)


void fun (int n)
{
    char sbuff [256];
    char *p0;
    BOOL fAlloc;

    if (n > sizeof (sbuff)) {
	p0 = malloc (n);
	fAlloc = TRUE;
    } else {
	p0 = sbuff;
	fAlloc = FALSE;
    }
    ...
RETURN:
    if (fAlloc) free (p0);
}