Выделяет в области стека блок для вызывающей программы.
void FAR * _Alloca(unsigned int size) unsigned int size; /* Размер выделяемой области стека в байтах. */ |
Примечания
_Alloca( ) возвращает указатель на блок, если блок был успешно выделен или возвращается ноль в противном случае. _Alloca( ) автоматически освобождает память после завершения работы вызывающей программы, поэтому никаких специальных действий по освобождению предпринимать не надо.
![]() |
---|
Некоторые компиляторы C, такие как MPW C, не поддерживают выделение памяти из стека; поэтому вызов _Alloca( ) в таких компиляторах может привести к непредсказуемым результатам. В подобных случаях для резервирования памяти в коде лучше пользуйтесь локальными переменными или вызывайте _AllocHand( ) и _FreeHand( ). |
Для получения дополнительной информации о том, как создавать библиотеку API и интегрировать её в Visual FoxPro, смотрите Доступ к API Visual FoxPro.
Пример
Следующий пример дублирует действие функции Visual FoxPro REPLICATE( ). Память, временно используемая под размножаемый символ, предоставляется _Alloca( ).
Код Visual FoxPro
![]() | |
---|---|
SET LIBRARY TO ALLOCA x = xREPLICATE("x", 120) ? x ? LEN(x) |
Код 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 }; |
Смотрите также

c Microsoft Corporation. All rights reserved. Microsoft is not reponsible for the contents of the translated help topics.