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() 関数の場合は再割り振り) するときに指定したバイト数です。ptrNULL の場合、free() は戻るだけです。
注:
  1. すべてのヒープ・ストレージは、呼び出し関数の活動化グループと関連付けられます。したがって、ストレージの割り振り、割り振り解除、および再割り振りは同じ活動化グループ内で行ってください。 1 つの活動化グループ内でヒープ・ストレージを割り振って、 異なる活動化グループからそのストレージを割り振り解除したり再割り振りすることは、有効ではありません。 活動化グループについての詳細は、「ILE 概念」のマニュアルを参照してください。
  2. calloc()malloc()、または realloc() によって割り振られなかったストレージのブロック (または以前に解放されたストレージ) を解放しようとすると、その後ストレージを予約するときに影響が生じて予期しない結果につながることがあります。 ILE バインド可能 API CEEGTST で割り振られたストレージは free() で解放できます。

C ソース・コードを変更せずに、単一レベル・ストア・ストレージの代わりにテラスペース・ストレージを使用する場合、コンパイラー・コマンドで TERASPACE(*YES *TSIFC) パラメーターを指定します。これにより、free() ライブラリー関数が _C_TS_free() (テラスペース・ストレージでの free() ライブラリー関数のカウンター・パート) にマップされます。

注: C2M1211 メッセージまたは C2M1212 メッセージが free() 関数から生成された場合、詳細については、C2M1211/C2M1212 メッセージの問題の診断を参照してください。

戻り値

戻り値はありません。

次の例は 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();
  }
}