I'm sorry this is not an answer, but I'd like to point out a potential problem with using variable-length arrays. Most of the code that I have come across looks like this.
void foo(int n)
{
int bar[n];
.
.
}
There is no explicit error checking here. A large n can easily cause problems.