1

memset を実行しようとすると、次の例外が発生します

「SendOutDllTestExe.exe の 0x1023af7d (PxSmartInterface.dll) で未処理の例外: 0xC0000005: アクセス違反の書き込み場所 0x40e3a80e.」

私の memset ステートメントは次のようになります

memset(lpStatus, 0, csStatus.GetLength());

4

2 に答える 2

2

これは C++ の例外ではなく、操作上の例外です。存在しないメモリにアクセスしたか、データ構造を破損してデストラクタをクラッシュさせました。delete(ブロックに含まれる構造を ing する前に、ブロックをゼロにしようとしていると仮定しています。)

C++ では、通常、 を呼び出しませんmemsetstd::fillは同じことを行います (通常、memset可能であれば を呼び出します) が、タイプ セーフです。

メモリのブロックをfreeing する前に消去したい場合は、デバッグ ライブラリが必要です。デストラクタが呼び出された後、呼び出される前に、オブジェクトのメモリにアクセスするクリーンな方法はありませんfree。デバッグ malloc は、おそらく開発環境の機能です。

free編集: をオーバーライドすることで、オブジェクトのプリメモリにアクセスできる場合がありますが、配列にはアクセスできませんdelete。しかし、それは初心者/中級者向けのアクティビティではありません。

于 2010-03-19T05:17:25.607 に答える
1

ほとんどの場合、書き込み可能なメモリのバイトをlpStatus指していません。csStatus.GetLength()の設定方法のロジックを調べる必要がありますlpStatus

于 2010-03-19T05:25:09.933 に答える