二重解放

二重解放

説明

同じメモリ領域を2回解放すると、アロケーターの状態が破損するおそれがあります。

想定される影響

  • クラッシュ、解放後のメモリ使用、任意のコード実行につながる可能性があります。

対処方法

所有権を一元管理し、解放後はポインターを無効化するか、RAIIを使用してください。

例

変更前

c
char *p = malloc(16);
free(p);
free(p);

変更後

c
char *p = malloc(16);
free(p);
p = NULL;

解説:

  • 変更前: 同じポインターを続けて2回解放しています。
  • 変更後: 解放後にポインターを無効化し、解放済みのメモリを指さないようにしています。

参考資料