用C一些代码重构期间++我遇到以下本地可变长度数组
void some_function(uint8_t length, uint8_t id, uint8_t * bytes)) {
uint8_t string[length + 8];
//some transformation on string [1-8] elements
do_something(string);
}
我不熟悉C99但使用可变长度数组大小[X + Y]看起来像这样将被放置在堆。 此外,我调试这个功能,以确保这个“字符串”变量被放在堆,它是。 在C局部变量不能是固定的大小,所以他们不需要使用后进行清理。 但在这里我们有固定大小的数组没有内存分配,所以没有必要这个变量之后进行清理,但如何GCC编译器管理该内存?
或者,也许其他的方式来澄清什么我正在考虑在这里:长度变量是从外部IO来所以在我看来可能有安全问题(例如,当长度将INTEGER_MAX值),除了检查长度的大小还有什么其他的动作可以被带到这里有安全码? 或者,也许它已经安全吗?