次の方法で共有


_freea

メモリ ブロックを割り当て解除または解放します。

構文

void _freea(
   void *memblock
);

パラメーター

memblock
以前割り当てられ、解放されるメモリ ブロック。

戻り値

ありません。

解説

_freea関数は、_mallocaの呼び出しによって以前に割り当てられたメモリ ブロック (memblock) の割り当てを解除します。 _freea は、ヒープまたはスタック上でメモリが割り当てられているかどうかを確認します。 スタック上で割り当てられている場合、_freea は何も行いません。 ヒープ上で割り当てられている場合、解放されるバイト数は、ブロックが割り当てられたときに要求されたバイト数と同じです。 memblockNULLされている場合、ポインターは無視され、_freeaはすぐに返されます。 無効なポインター ( _mallocaによって割り当てられなかったメモリ ブロックへのポインター) を解放しようとすると、後続の割り当て要求に影響し、エラーが発生する可能性があります。

_freea は、メモリがヒープに割り当てられていることが判明した場合に内部的に free します。 メモリが、ヒープまたはスタックのどちらにあるかは、割り当てられたメモリの直前のアドレスにメモリ内で配置されたマーカーによって決まります。

メモリの解放でエラーが発生すると、エラーの性質に関するオペレーティング システムからの情報が errno に設定されます。 詳細については、「errno」、「_doserrno」、「_sys_errlist」、および「_sys_nerr」を参照してください。

メモリ ブロックが解放された後、 _heapmin は、未使用の領域を結合してオペレーティング システムに解放することで、ヒープ上の空きメモリの量を最小限に抑えます。 オペレーティング システムにリリースされない解放されたメモリは、空きプールに復元され、再度割り当てに使用できます。

_freea に対する呼び出しは、_malloca に対するすべての呼び出しを伴う必要があります。 また、同じメモリ上で _freea を 2 回呼び出すとエラーになります。 アプリケーションが C ランタイム ライブラリのデバッグ バージョンにリンクされている場合 (特に、_CRTDBG_MAP_ALLOCを定義して_malloc_dbg機能が有効になっている場合)、_freeaの呼び出しが見つからないか重複しているのを簡単に見つけることができます。 デバッグ プロセス中にヒープを管理する方法の詳細については、「 CRT デバッグ ヒープを参照してください。

_freea__declspec(noalias) としてマークされます。これは、関数がグローバル変数を変更しないことを保証します。 詳細については、noaliasを参照してください。

要件

機能 必須ヘッダー
_freea <stdlib.h> および <malloc.h>

互換性の詳細については、「 Compatibility」を参照してください。

_malloca の例を参照してください。

関連項目

メモリ割り当て
_malloca
calloc
malloc
_malloc_dbg
realloc
_free_dbg
_heapmin