free() — ストレージ・ブロックを解放する
形式
#include <stdlib.h>
void free(void *ptr);言語レベル
ANSI
スレッド・セーフ
はい
説明
free() 関数は、ストレージのブロックを解放します。 ptr 引数は、 calloc()、 malloc()、 realloc()、 _C_TS_calloc()、 _C_TS_malloc()、 _C_TS_realloc()、または _C_TS_malloc64() 関数の呼び出しによって以前に予約されたブロックを指します。 解放されるバイト数は、ストレージのブロックを予約 (または realloc() 関数の場合は再割り振り) したときに指定したバイト数です。 ptr が NULLの場合、 free() は単に戻ります。注:
- すべてのヒープ・ストレージは、呼び出し関数の活動化グループと関連付けられます。 したがって、ストレージの割り振り、割り振り解除、および再割り振りは同じ活動化グループ内で行ってください。 1 つの活動化グループ内でヒープ・ストレージを割り振って、 異なる活動化グループからそのストレージを割り振り解除したり再割り振りすることは、有効ではありません。 活動化グループについての詳細は、「ILE 概念」のマニュアルを参照してください。
calloc()、malloc()、またはrealloc()で割り振られていないストレージ (または以前に解放されたストレージ) のブロックを解放しようとすると、それ以降のストレージの予約に影響を与え、未定義の結果になる可能性があります。 ILE バインド可能 API CEEGTST を使用して割り振られたストレージは、free()を使用して解放できます。
C ソース・コードを変更せずに、単一レベル・ストア・ストレージの代わりにテラスペース・ストレージを使用する場合、コンパイラー・コマンドで TERASPACE(*YES *TSIFC) パラメーターを指定します。 これにより、 free() ライブラリー関数が、対応するテラスペース・ストレージである _C_TS_free()にマップされます。
注:
free() 機能から C2M1211 または C2M1212 メッセージが生成される場合、詳しくは、「 Diagnosing C2M1211/C2M1212 Message Problems 」を参照してください。戻り値
戻り値はありません。
例
この例では、
calloc() 関数を使用して x 配列エレメント用のストレージを割り振り、次に free() 関数を呼び出してそれらを解放します。#include <stdio.h>
#include <stdlib.h>
int main(void)
{
long * array; /* start of the array */
long * index; /* index variable */
int i; /* index variable */
int num; /* number of entries of the array */
printf( "Enter the size of the array\n" );
scanf( "%i", &num );
/* allocate num entries */
if ( (index = array = calloc( num, sizeof( long ))) != NULL )
{
for ( i = 0; i < num; ++i ) /* put values in array */
*index++ = i; /* using pointer notation */
free( array ); /* deallocates array */
}
else
{ /* Out of storage */
perror( "Error: out of storage" );
abort();
}
}