during some code refactor in C++ i meet following local variable length arrays
May 08, 2016 I'm trying to make a program that shows the morse code of the alphabet (A-Z) on my STM32 F091 microcontroller using a LED on the board. So I made an array. These arrays are declared like any other automatic arrays, but with a length that is not a constant expression. The storage is allocated at the point of declaration and deallocated when the block scope containing the declaration exits.
![Stm32 Array Declaration Stm32 Array Declaration](/uploads/1/2/4/7/124784145/556184951.png)
I am not familiar with C99 but using Variable-length array size [x+y] look like this will be placed in heap. Also I debug this function to make sure that this 'string' variable is placed on heap and it is.In C local variables can't be fixed size, so they are not needed to clean up after using them. But here we have fixed size array without memory allocation, so is no need to clean up after this variable, but how GCC compiler manage this memory?
Or maybe on other way to clarifying what I am considering here: length variable is coming from external IO so in my opinion there can be security issue (for example when length will be INTEGER_MAX value), besides check the size of length what other actions can be taken to have secure code here? Or maybe it is already secure?
Deduplicator36.3k66 gold badges5252 silver badges9191 bronze badges
user4032676
2 Answers
What you see in this code is a C99 Variable Length Array. A similar proposal almost made it to C++14, but didn't. So this code is not valid STANDARD C++, but your compiler may support it. AFAIK, C99 VLAs store their memory on the stack.
Ophir GvirtzerOphir Gvirtzer
See this question and this one. It's a GCC extension:
Variable-length automatic arrays are allowed in ISO C99, and as an extension GCC accepts them in C90 mode and in C++. These arrays are declared like any other automatic arrays, but with a length that is not a constant expression. The storage is allocated at the point of declaration and deallocated when the block scope containing the declaration exits.
Community♦
user4934183