Я гарантирую, что этот вопрос задан раньше, но я не смог найти его через поиск; извините заранее за любые увольнения.
Это мое (потенциально неправильное) понимание того, что вы выделяете стек только тогда, когда вы знаете размер объекта во время компиляции. Поэтому в случае инициализации массива вы можете сделать одно из них (и это должно идти в стек):
char charArray[50];
Поскольку размер этого массива известен во время компиляции, это не должно иметь проблем.
С другой стороны, этот (я считаю) также действительный код:
char anotherCharArray[someVariable + 50];
Будет ли это идти и в стеке? Я уверен, что код segfaults, если вы освободите(), так что это заставляет меня думать, что это так, но для меня это не имеет смысла. Точно так же, 100% единственная ситуация, когда вам нужно использовать free(), когда данные были распределены через malloc?
Заранее благодарим за помощь.