C言語free()関数完全マスター:実践ガイドと例
C言語のfree()関数とは
free()関数はC標準ライブラリの一部で、malloc()、calloc()、realloc()で以前に割り当てられたメモリを解放します。ブロックをヒープに返すことで、プログラムのメモリフットプリントを制御し、利用可能メモリの枯渇を防ぎます。
スタック変数とは異なり、動的に割り当てられたメモリは明示的に解放する必要があります。free()を呼ばないとメモリリークが発生し、最終的にout-of-memoryエラーの原因となります。
構文
void free(void *ptr);
ptrは解放したいメモリブロックへのポインタです。NULLポインタを渡しても安全で、何もしません。
実践例
#include <stdio.h>
#include <stdlib.h>
int main(void) {
// 10個の整数分の領域を確保
int *ptr = malloc(10 * sizeof(*ptr));
if (ptr == NULL) {
fprintf(stderr, "Memory allocation failed\n");
return 1;
}
// 値を格納して表示
ptr[2] = 50;
printf("Value of the 3rd integer is %d\n", ptr[2]);
// 使用後にメモリを解放
free(ptr);
return 0;
}
出力:
Value of the 3rd integer is 50
ベストプラクティス
malloc()等の戻り値を使用前に必ずチェックfree()呼び出し後、ポインタをNULLに設定し、誤った二重解放を防止- 動的に割り当てられていないメモリをfreeしない
- メモリが不要になったらできるだけ早めに
free()を呼び、ヒープを軽量に保つ
C言語
- C++ std::vector完全ガイド:動的配列、イテレータ、実践例
- C++ std::map完全ガイド:連想配列の実践的活用とコード例
- C++ポリモーフィズム徹底解説:実践例とキー概念
- C言語のcalloc():ゼロ初期化メモリ割り当てと実践例
- C言語のrealloc()活用ガイド:構文、ベストプラクティス、実例
- VHDLにおける不純関数の活用:FSMの可読性と保守性向上
- VHDL関数マスター:効率的な設計のための実践ガイド
- Python strip()メソッド完全ガイド:実践例付き
- Java String.length()メソッド:文字列サイズ取得の実例解説
- Java String.compareTo()マスター:構文、ユースケース、実践例
- Java BufferedReader でファイル読み込み:実践ガイドと例