alloca

提供: RAD Studio
移動先: 案内検索

malloc.h:インデックス への移動


ヘッダーファイル

malloc.h

カテゴリ

メモリルーチン

プロトタイプ

void *alloca(size_t size);

説明

一時的なスタック領域を割り当てます。

alloca は,スタックに size バイトを割り当てます。割り当てられた領域は,呼び出し側の関数の終了時に自動的に解放されます。

alloca の使用は推奨されていません。C++ プログラムの try ブロックでは,alloca 関数を使用しないでください。例外が送出されると,alloca によってスタックに配置されたすべての値が破損します。

戻り値

十分なスタック領域がある場合,alloca は,割り当てられたスタック領域へのポインタを返します。そうでない場合は,NULL を返します。



 #include <malloc.h>
 #include <stdio.h>
 #include <stdlib.h>
 void test(int a)
 {
    char *newstack;
    int len = a;
    char dummy[1];
 dummy[0] = 0;         /* 適切なスタックフレームの強制 */
    printf("SP before calling alloca(0x%X) = 0x%X\n",len,_SP);
    newstack = (char *) alloca(len);
 printf("SP after calling alloca = 0x%X\n",_SP);
    if (newstack)
       printf("Alloca(0x%X) returned %p\n",len,newstack);
    else
       printf("Alloca(0x%X) failed\n",len);
 }
 void main()
 {
    test(256);
    test(16384);
 }



移植性



POSIX Win32 ANSI C ANSI C++

+