Выделить память из стека
#include <alloca.h>void * alloca( size_t size );
libc
Функция alloca() выделяет место под объект размером size байт из стека. Выделенная память автоматически освобождается при выходе из текущей функции.
Не используйте данную функцию в выражении, которое является аргументом функции. |
Указатель на начало выделенной памяти в стеке. Если возникла ошибка, функция возвращает 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 системной библиотеки