このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
前に解放したポインターの使用
割り当て解除後のメモリ アクセス
説明
この欠陥は、メモリのブロックを関数 free
を使用して解放した後で、そのブロックにアクセスした場合に発生します。
リスク
malloc
、calloc
、または realloc
を使用してポインターに動的メモリが割り当てられている場合、ポインターはヒープ上のメモリ位置を指します。このポインターに対して関数 free
を使用すると、メモリの関連ブロックが再割り当て用に解放されます。メモリのこのブロックにアクセスしようとすると、予測できない動作やセグメンテーション違反が発生する可能性があります。
修正方法
修正方法は欠陥の根本原因によって異なります。メモリを後で解放することを意図しているのか、またはアクセスする前に別のメモリ ブロックをポインターに割り当てることを意図しているのかを確認します。
メモリ ブロックを解放した後、対応するポインターに NULL を割り当てることをお勧めします。ポインターをデリファレンスする前に、NULL 値かどうかをチェックしてエラーを処理します。この方法により、解放されているブロックにアクセスするのを避けることができます。
例
結果情報
グループ: 動的メモリ |
言語: C | C++ |
既定値: オン |
コマンド ライン構文: FREED_PTR |
影響度: High |
バージョン履歴
R2013b で導入