Yerel olmayan çıkışlar
longjmp alloca işlevini çağıran işlevden de çıkışa sebep olacağından
alloca ile ayrılan alan özdevinimli olarak serbest bırakılır. Bu,
alloca işlevinin kullanılması için en önemli sebeptir.
Bunu örnekleyecek olursak,
open gibi başarılı olduğunda bir dosya tanıtıcı döndüren ama başarısız olduğunda dönmeyen
open_or_report_error isimli bir işleviniz olsun. Dosya açılamazsa bir hata iletisi bassın ve
longjmp kullanarak yazılımınızın komut seviyesine geçsin.
Önceki örnekteki open2 işlevini bu işlevi kullanacak şekilde değiştirelim:
int
open2 (char *str1, char *str2, int flags, int mode)
{
char *name = (char *) alloca (strlen (str1) + strlen (str2) + 1);
stpcpy (stpcpy (name, str1), str2);
return open_or_report_error (name, flags, mode);
}
alloca işlevinin çalışma şeklinden dolayı, ayırdığı bellek bir hata oluşsa bile serbest bırakılır ve bunun için ek bir çaba gerekmez.
Karşılaştıma için, open2 işlevinin önceki tanımı (malloc ve free kullanılan) bu amaç için değiştirildiğinde bir bellek artığı oluşacaktı. Hatta, siz bunu düzeltmek için her değişikliği yapmaya razı olsanız bile, bunu yapmanın daha kolay bir yolu yoktur.