alloca()

QNX SDP8.0C Library ReferenceAPIDeveloper

Allocate automatic space from the stack

Synopsis:

#include <alloca.h>

void *alloca( size_t size );

Arguments:

size
The number of bytes of memory to allocate.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The alloca() function allocates space for an object of size bytes from the stack. The allocated space is automatically discarded when the current function exits.

CAUTION:

Our current alloca() macro implementation evaluates its argument more than once. Do not pass an expression with side effects as its argument because unexpected behavior may result.

Also, don't use an alloca() call as an argument to another function. Calling alloca() can involve pushing arguments onto the stack and, because this function changes the stack pointer, the arguments to the other function are likely to get reordered unexpectedly.

Returns:

A pointer to the start of the allocated memory, or NULL if there wasn't enough memory.

Examples:

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

Classification:

Unix

Safety:
Cancellation pointNo
Signal handlerYes
ThreadYes
Page updated: