UNIX/Linuxの部屋 関数:free

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




関数 free malloc・realloc で確保した領域を開放する このエントリーをはてなブックマークに追加

#include <stdlib.h>
char *p;
p = malloc(100);
if ( p != NULL ){
/* malloc 失敗 */
}
...
free(p);
/* free(3) がエラーになることはないので、エラーチェックは不要 */

メモリを free(3) した場合でも、確保したメモリが OS に即座に返されることはない。プロセスが終了して初めてメモリが OS に返却され、他のプロセスから利用可能になる。

既に free(3) した領域を、再度 free(3) してはいけない (これをダブルフリー (double free) と呼ぶ)。ダブルフリーはコアダンプの原因となるだけではなく、外部から悪意のあるコードを実行される可能性がある。ダブルフリーを行っても問題がない OS (FreeBSD) もあるが、多くの OS はダブルフリー対策はなされていないので、注意しよう。