If I have a function like this:
void bla(int size) { while(b){ char tmp[size]; ...... } }
tmp gets freed at each it
It will be freed at end of function, but since you call alloca() inside the loop you'll likely get stack overflow. If size doesn't change within the function you should call alloca() before the loop.
alloca()
size