_Alloca( ) (Rutina de biblioteca API)

Asigna un bloque de espacio en la pila para la rutina que realiza la llamada.

void FAR * _Alloca(unsigned int size)
unsigned int size;            /* Size of stack space to allocate in 
bytes. */

Observaciones

_Alloca( ) devuelve un puntero al bloque si el bloque se asigna con éxito o devuelve cero si no se asigna. _Alloca( ) libera automáticamente memoria cuando la rutina acaba, por lo que no es necesario que lo haga la correspondiente rutina.

Precaución   Algunos compiladores de C, como MPW C, no admiten la asignación de memoria de la pila, por lo que las llamadas a _Alloca( ) desde esos compiladores darán resultados impredecibles. En su lugar, utilice variables locales o llamadas a _AllocHand( ) y _FreeHand( ) en el código para reservar memoria.

Para obtener más información acerca de cómo crear una biblioteca API e integrarla con Visual FoxPro, vea Acceso a la API de Visual FoxPro.

Ejemplo

El siguiente ejemplo duplica la acción de la función REPLICATE( ) de Visual FoxPro. La memoria utilizada temporalmente para duplicar el carácter proviene de _Alloca( ).

Código Visual FoxPro

SET LIBRARY TO ALLOCA  
x = xREPLICATE("x", 120)
? x
? LEN(x)

Código C

#include <pro_ext.h>

void FAR allocaEx(ParamBlk FAR *parm)
{
   char FAR *rep;
   char c = *(char *) _HandToPtr(parm->p[0].val.ev_handle);

   rep = _Alloca((int) parm->p[1].val.ev_long + 1);
   _MemFill(rep, c, (int) parm->p[1].val.ev_long);
  rep[parm->p[1].val.ev_long] = '\0';  // null terminate

   _RetChar(rep);
}

FoxInfo myFoxInfo[] =
{
   {"XREPLICATE", (FPFI) allocaEx, 2, "C,I"},
};

FoxTable _FoxTable =
{
   (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

Vea también

_AllocHand( ) (Rutina de biblioteca API) | _FreeHand( ) (Rutina de biblioteca API) | REPLICATE( ) (Función) | Acceso a la API de Visual FoxPro