Share via


_freea

更新 : 2007 年 11 月

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

void _freea( 
   void *memblock 
);

パラメータ

  • memblock
    解放する割り当て済みメモリ ブロック。

戻り値

なし。

解説

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

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

Visual C++ 2005 では、メモリの解放時にエラーが発生した場合、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>

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

使用例

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

.NET Framework の相当するアイテム

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

参照

参照

メモリ割り当て

_malloca

calloc

malloc

_malloc_dbg

realloc

_free_dbg

_heapmin