alloca()

Выделить память из стека

Прототип:

#include <alloca.h>
void * alloca( size_t size );

Аргументы:

size
Количество байт памяти, которые требуется выделить.

Библиотека:

libc

Описание:

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


Note: Не используйте данную функцию в выражении, которое является аргументом функции.

Возвращаемое значение:

Указатель на начало выделенной памяти в стеке. Если возникла ошибка, функция возвращает NULL, код ошибки записывается в errno.

Примеры:

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
FILE * open_err_file( char *name )
{
char *buffer;
/* allocate temporary buffer for file name */
buffer = (char *)alloca( strlen( name ) + 5 );
if ( buffer )
{
FILE *fp;
sprintf( buffer, "%s.err", name );
fp = fopen( buffer, "w" );
return (fp);
}
return ((FILE *)NULL);
}
int main( void )
{
FILE *fp;
fp = open_err_file( "alloca_test" );
if ( fp == NULL )
{
printf( "Unable to open error file\n" );
} else {
fprintf( fp, "Hello from the alloca test.\n" );
fclose( fp );
}
return (EXIT_SUCCESS);
}

Классификация:

Unix

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

Не используйте функцию alloca() в качестве аргумента функции.

Тематические ссылки:

calloc(), malloc(), __stackavail()




Предыдущий раздел: Описание API системной библиотеки