アプリケーションを2日間実行してもこのエラーが発生します。何が原因の可能性があります:通常のブロックエラーの後?
バッファオーバーフローが発生していると言われましたが、それは唯一の選択肢ですか?
このアプリはVisual C++ 6.0を使用してC++で書かれています。
アプリケーションを2日間実行してもこのエラーが発生します。何が原因の可能性があります:通常のブロックエラーの後?
バッファオーバーフローが発生していると言われましたが、それは唯一の選択肢ですか?
このアプリはVisual C++ 6.0を使用してC++で書かれています。
デバッグ時に、動的バッファをnew
で取得すると、バッファの前後に特別なコードが挿入されてバッファを保護します。
例:
<Guard>=====buffer allocated on heap of required size=======<Guard>
あなたがバッファをオーバーランした場合、挿入されたガードが破損し、あなたがバッファを削除しようとすると、デバッガは、バッファオーバーランを検出した後主張でしょう。
大きなコードベースでバッファオーバーランを検出するのが困難なビットです。 Rational Purifyのようなツールを使用して
正しいオプションでは、Visual C++は各バッファの最後にガード値をスローします。バッファを解放すると、バッファがまだ有効であることを確認します。そうでない場合は、表示されているエラーが発生します。
このエラーの最も一般的な原因は、バッファオーバーランです。しかし、(理論的に)ランダムなポインタ書き込みによって引き起こされる可能性があります(結局、はにガード値を書き込むことができます)。
オッズは、オーバーランです。
これを再現するための最も簡単な方法は次のようなものです:あなたがその割り当てられた領域を超えたメモリ位置への書き込みをしているかどうかを
//Allocate space for holding 10 ints
int *p = new int[10];
//Overwrite the memory.. doesn't crash here
p[10] = 8;
//Try to delete..crashes..
delete[] p;
チェック。
質問他の答えに私のコメントを参照してくださいを参照してください。助けてくれてありがとう。 – Rodrigo