メモリ管理 レッスン4
メモリリーク
リーク検出・valgrind・よくあるパターンを学びましょう。
メモリリークとは
メモリリークとは、確保したメモリを free() せずにポインタを失うことです。 プログラムが動き続けるとメモリ消費が増え続け、最終的にシステムが不安定になります。
- 全ての malloc/calloc に対応する free が必要
- エラーパスでも free を忘れずに
- valgrind でリークを検出:
valgrind --leak-check=full ./program - free 後にポインタを NULL にする習慣
リークの典型的なパターン
よくあるメモリリークのパターンと正しい書き方を比較します。
Cエディタ
エラーパスでのリーク
エラー処理でも確保済みのメモリを解放する必要があります。
Cエディタ
ループでの確保と解放
ループ内で確保する場合はループ内で必ず解放します。
Cエディタ