回答編集履歴

1 回答に間違いがあったので修正します。

Bull

Bull score 820

2019/05/07 18:32  投稿

使用している開発環境が分らないのですが、ライブラリーによっては、メモリーリークを検出できます。
例えば VC++ ですと、`<crtdbg.h>`をインクルードして`main` の最初で`_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG));`
などとしておくと、`malloc` したメモリーを `free` しないで終了するとその旨を報告してくれます。(デバッグビルド時のみ)
テストデータを適当に作って `Free_Memory` を呼ぶように修正して実行してみましたが、メモリーの解放はできてないです。
修正方法ですが、「`p->left` あるいは `p->right` が `NULL` でなかったら、それぞれを `Free_Memory` で解放してから `p` を `free` で解放する」でいいと思います。
```c
void Free_Memory(TREE * p) {
   if (p == NULL) {
       return;
   }
   if (p->left) {
       Free_Memory(p->left);
   }
   if (p->right) {
       Free_Memory(p->right);
   }
   free(p);
}
```
```
---
指摘されましたので、修正します。
```c
void Free_Memory(TREE * p) {
   if (p == NULL) {
       return;
   }
   Free_Memory(p->left);
   Free_Memory(p->right);
   free(p);
}
```
これで充分ですね。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る