&gt; There is no way to recover from a failed VLA allocation.<p>There&#x27;s no way to recover from <i>any</i> stack allocation.<p><pre><code>    #define TOO_BIG 1000000
</code></pre>
This:<p><pre><code>    {
        double big_array[TOO_BIG]; &#x2F;&#x2F; not a VLA
    }
</code></pre>
is no safer than this:<p><pre><code>    {
        size_t size = TOO_BIG; &#x2F;&#x2F; size is not a constant
        double big_vla[size];
    }
</code></pre>
If you use VLAs (variable length arrays) in a manner that permits arbitrary unchecked sizes, then yes, they&#x27;re dangerous. If you carefully check the size so that a VLA is no bigger than a corresponding fixed-size array would have been, they don&#x27;t introduce any new risk.<p>(I&#x27;m not sure why VLAs were made optional in C11, at least for hosted implementations. Support for them was mandatory in C99, and I&#x27;m skeptical that they impose any significant burden on compilers.)