Всегда важно вызывать _freea после каждого вызова _malloca.
_malloca похож на _alloca, но добавляет некоторые дополнительные проверки безопасности и улучшения для вашей защиты. В результате, _malloca может размещаться в куче, а не в стеке. Если это произойдет, и вы не вызовете _freea, вы получите утечку памяти.
В режиме отладки _malloca ВСЕГДА выделяется в куче, поэтому также должен быть освобожден.
Найдите в _ALLOCA_S_THRESHOLD подробности о том, как работают пороги и почему _malloca существует вместо _alloca, и это должно иметь смысл.
Редактировать:
Были комментарии, предлагающие, чтобы человек просто выделял кучу, использовал умные указатели и т. Д.
Существуют преимущества для размещения стеков, которые _malloca предоставит вам, поэтому есть причины для этого. _alloca будет работать таким же образом, но с гораздо большей вероятностью может вызвать переполнение стека или другие проблемы, и, к сожалению, не предоставляет хороших исключений, а скорее просто разрушает ваш процесс. _malloca намного безопаснее в этом отношении и защищает вас, но цена заключается в том, что вам все еще нужно освободить память с помощью _freea, поскольку возможно (но маловероятно, что в режиме выпуска) _malloca выберет размещение в куче, а не в стеке.
Если ваша единственная цель - избежать освобождения памяти, я бы порекомендовал использовать умный указатель, который будет обрабатывать освобождение памяти для вас, когда член выходит из области видимости. Это выделит память в куче, но будет безопасным и избавит вас от необходимости освобождать память. Однако это будет работать только в C ++ - если вы используете обычный старый C, этот подход не будет работать.
Если вы пытаетесь выделить в стеке по другим причинам (обычно это производительность, поскольку распределение в стеке очень и очень быстро), я бы порекомендовал использовать _malloca и учитывать тот факт, что вам нужно будет вызывать _freea для ваших значений .