Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Reserviert für die aufrufende Routine einen Block vom Stapelspeicher.
void FAR * _Alloca(unsigned int size)
unsigned int size; /* Size of stack space to allocate in
bytes. */
Hinweise
_Alloca( ) gibt einen Zeiger auf den Block zurück, wenn der Block reserviert wurde. Wenn der Block nicht reserviert werden konnte, gibt _Alloca( ) Null zurück. _Alloca( ) gibt den Speicher beim Beenden der Routine automatisch frei. Damit ist keine entsprechende Freigaberoutine erforderlich.
Vorsicht Einige C-Compiler, wie z. B. MPW C, unterstützen keine Reservierung von Stapelspeicher. Aufrufe von _Alloca( ) mit solchen Compilern führen zu unvorhersehbaren Ergebnissen. Verwenden Sie in Ihrem Code stattdessen lokale Variablen oder _AllocHand( )-Aufrufe und _FreeHand( )-Aufrufe zum Reservieren von Speicher.
Weitere Informationen zum Erstellen einer API-Bibliothek und ihrer Integration in Visual FoxPro finden Sie unter Zugreifen auf die Visual FoxPro-API.
Beispiel
Im folgenden Beispiel wird die Aktion der Visual FoxPro-Funktion REPLICATE( ) dupliziert. Der zum Duplizieren des Zeichens temporär verwendete Speicher wurde mit _Alloca( ) reserviert.
Visual FoxPro-Code
SET LIBRARY TO ALLOCA
x = xREPLICATE("x", 120)
? x
? LEN(x)
C-Code
#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
};
Siehe auch
_AllocHand( ), API-Bibliotheksroutine | _FreeHand( ), API-Bibliotheksroutine | REPLICATE( )-Funktion | Zugreifen auf die Visual FoxPro-API