次の方法で共有


_freea

メモリ ブロックを解放するか、解放します。

void _freea( 
   void *memblock 
);

パラメーター

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

戻り値

なし。

解説

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

メモリをヒープに割り当てられたことが検出された場合はfreea は free を内部的に呼び出します。 メモリをヒープまたはスタックであるかに割り当てられたメモリのアドレスはメモリ内にあるマーカーによって決まります。

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

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

_freea の呼び出しは _mallocaへのすべての呼び出しに伴わなければ必要があります。 また、同じメモリの _freea を二度呼び出すエラーです。 アプリケーションが C ランタイム ライブラリのデバッグ バージョンとリンクすると、特に _malloc_dbg 機能と _CRTDBG_MAP_ALLOCの定義で有効になっている _freeaにパーツが見つからないか、重複している呼び出しを見つけやすくなります。 ヒープのデバッグ中にどのように管理されるかを詳細については、「CRT のデバッグ ヒープ」を参照してください。

_freea は グローバル変数を変更せずに関数が保証されることを意味するマークされた __declspec(noalias)です。 詳細については、「noalias」を参照してください。

必要条件

関数

必須ヘッダー

_freea

<stdlib.h> および <malloc.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

使用例

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

同等の .NET Framework 関数

使用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

関連項目

メモリ割り当て

_malloca

calloc

malloc

_malloc_dbg

realloc

_free_dbg

_heapmin