+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);
}