このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ポインターの無効な解放
対応する動的割り当てのないポインターの割り当て解除
説明
この欠陥は、関数 free
を使用して解放されたメモリのブロックが、過去に malloc
、calloc
または realloc
を使用して割り当てられていなかった場合に発生します。
リスク
関数 free
はヒープに割り当てられたメモリのブロックを解放します。以前に割り当てていないヒープ上の位置にアクセスしようとすると、セグメンテーション違反が発生する可能性があります。
この問題により、コーディング エラーが強調表示される場合があります。たとえば、関数 free
または前の関数 malloc
を別のポインターに対して使用する必要があった可能性があります。
修正方法
ほとんどの場合、free
ステートメントを削除することによって問題を修正できます。malloc
または calloc
を使用してポインターにヒープのメモリが割り当てられていない場合、このポインターを解放する必要はありません。単に必要に応じてポインターを再利用できます。
この問題によって、間違ったポインターに対して free
または malloc
を使用するなどのコーディング エラーが明らかになった場合は、そのエラーを修正します。
new
演算子で割り当てられたメモリを解放するために関数 free
を使用したことが原因で問題が発生している場合は、関数 free
を delete
演算子に置き換えます。
例
結果情報
グループ: 動的メモリ |
言語: C | C++ |
既定値: オン |
コマンド ライン構文: BAD_FREE |
影響度: High |
バージョン履歴
R2013b で導入