Выделяет в области стека блок для вызывающей программы.
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
Copy Code | |
|---|---|
SET LIBRARY TO ALLOCA
x = xREPLICATE("x", 120)
? x
? LEN(x) | |
Код C
Copy 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
}; | |
Смотрите также
c Microsoft Corporation. All rights reserved. Microsoft is not reponsible for the contents of the translated help topics.
Внимание