Программирование на C и C++

Онлайн справочник программиста на C и C++

alloca

void *alloca(size_t size)

Прототип: 
Описание: 

Эта функция не определена стандартом ANSI С. Функция alloca() выделяет size байт памяти из стека системы (не из кучи) и возвращает на него указатель. Если запрос на выделение памяти не выполнен, то возвращается нулевой указатель.

Выделенная с использованием alloca() память автоматически освобождается при выходе из фун­кции, которая вызвала alloca(). Это означает, что указатель, возвращенный функцией alloca(), никогда не служит аргументом функции free().

ЗАМЕТКА: По техническим причинам, чтобы гарантировать сохранность стека, всякая функция, в которой используется вызов alloca(), должна содержать хотя бы одну локальную переменную, которой присваивается значение.

 

Пример: 
В следующий программе выделяется 80 байт памяти из стека с использованием alloca().
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i=10;
char *str;
if (!(str = (char *) alloca(80))) {
printf("Allocation error.");
exit(1);
}
/* ... */
return 0;
}