Why is the use of alloca() not considered good practice?

alloca, allocation, c, malloc, stack

Solution

The answer is right there in the `man` page (at least on Linux):

RETURN VALUE The alloca() function returns a pointer to the beginning of the allocated space. If the allocation causes stack overflow, program behaviour is undefined.

Which isn't to say it should never be used. One of the OSS projects I work on uses it extensively, and as long as you're not abusing it (`alloca`'ing huge values), it's fine. Once you go past the "few hundred bytes" mark, it's time to use `malloc` and friends, instead. You may still get allocation failures, but at least you'll have some indication of the failure instead of just blowing out the stack.

Problem

`alloca()` allocates memory on the stack rather than on the heap, as in the case of `malloc()`. So, when I return from the routine the memory is freed. So, actually this solves my problem of freeing up dynamically allocated memory. Freeing of memory allocated through `malloc()` is a major headache and if somehow missed leads to all sorts of memory problems. Why is the use of `alloca()` discouraged in spite of the above features?

Original source

Related problems