Помимо уже обсуждаемых моментов, когда освобождается именно пространство и поддерживается ли конструкция вообще, есть и следующее:
- В случае
alloca
, bytes
имеет тип указателя.
- В случае
[]
, bytes
имеет тип массива.
Самая заметная разница в том, что sizeof(bytes)
; для указателя это размер указателя (sizeof(void *)
), тогда как для массива это размер выделенного пространства (sizeof(char) * size
, что = size
для этого случая, поскольку sizeof(char)
= 1).
(Кроме того, в вашем примере типы элементов различны; для того, чтобы они были одинаковыми, первый должен быть изменен на char *bytes = alloca(size)
.)