説明
同じメモリ領域を2回解放すると、アロケーターの状態が破損するおそれがあります。
想定される影響
- クラッシュ、解放後のメモリ使用、任意のコード実行につながる可能性があります。
対処方法
所有権を一元管理し、解放後はポインターを無効化するか、RAIIを使用してください。
例
変更前
c
char *p = malloc(16);
free(p);
free(p);
変更後
c
char *p = malloc(16);
free(p);
p = NULL;
解説:
- 変更前: 同じポインターを続けて2回解放しています。
- 変更後: 解放後にポインターを無効化し、解放済みのメモリを指さないようにしています。