以前に割り当て解除したポインターの解放
割り当てなしで複数回解放されているメモリ
説明
この欠陥は、メモリのブロックが、関数 free を使用して中間割り当てなしで連続して解放された場合に発生します。
リスク
malloc、calloc、または realloc を使用してポインターに動的メモリが割り当てられている場合、ポインターはヒープ上のメモリ位置を指します。このポインターに対して関数 free を使用すると、メモリの関連ブロックが再割り当て用に解放されます。メモリのこのブロックを解放しようとすると、セグメンテーション違反が発生する可能性があります。
修正方法
修正方法は欠陥の根本原因によって異なります。最初の割り当て解除と 2 番目の割り当て解除の間でメモリ ブロックをポインターに割り当てることを意図しているかどうかを確認します。そうでない場合は、2 番目の free ステータスを削除します。
メモリ ブロックを解放した後、対応するポインターに NULL を割り当てることをお勧めします。ポインターを解放する前に、NULL 値かどうかをチェックしてエラーを処理します。この方法により、既に解放されているブロックを解放するのを避けることができます。
例
結果情報
| グループ: 動的メモリ |
| 言語: C | C++ |
| 既定値: オン |
コマンド ライン構文: DOUBLE_DEALLOCATION |
| 影響度: High |