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 メッセージが生成される場合、詳しくは、「 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();
  }
}

関連情報