最終更新日時: 2026年07月22日 16時47分32秒 (JST)
rotarymars が更新

履歴 編集

function
<cstdlib>

# std::free

    namespace std {
      void free(void* ptr) noexcept;
    }

## 概要

`malloc`、`calloc`、`aligned_alloc`、`realloc`で確保されたメモリ領域を解放する。

解放済みのポインタを再度 `free` に渡したり、アクセスしたりするときの動作は未定義となる。

ポインタが`nullptr`の場合、この関数は何も実行しない。

解放されたポインタに再びアクセスする場合、未定義動作を引き起こす恐れがある。

## 備考

この関数はスレッドセーフである。

## 実装例

    #include <cstdlib>

    int main()
    {
      int *p1 = static_cast<int*>(std::malloc(10 * sizeof *p1));
      std::free(p1); // p1のメモリを解放

      int *p2 = static_cast<int*>(std::calloc(10, sizeof *p2));
      int *p3 = static_cast<int*>(std::realloc(p2, 1000 * sizeof *p3));
      if (p3)
        std::free(p3); // realloc により新しい領域が確保された場合、それを解放
      else
        std::free(p2); // realloc が失敗した場合は元の領域を解放
    }

### 出力

## 関連項目

- `aligned_alloc`:指定したアライメントでメモリを確保する
- `malloc`:メモリを確保する
- `calloc`:メモリを確保する(0で初期化する)
- `realloc`:メモリを再確保する