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;
}
#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;
}