memset を実行しようとすると、次の例外が発生します
「SendOutDllTestExe.exe の 0x1023af7d (PxSmartInterface.dll) で未処理の例外: 0xC0000005: アクセス違反の書き込み場所 0x40e3a80e.」
私の memset ステートメントは次のようになります
memset(lpStatus, 0, csStatus.GetLength());
これは C++ の例外ではなく、操作上の例外です。存在しないメモリにアクセスしたか、データ構造を破損してデストラクタをクラッシュさせました。delete
(ブロックに含まれる構造を ing する前に、ブロックをゼロにしようとしていると仮定しています。)
C++ では、通常、 を呼び出しませんmemset
。std::fill
は同じことを行います (通常、memset
可能であれば を呼び出します) が、タイプ セーフです。
メモリのブロックをfree
ing する前に消去したい場合は、デバッグ ライブラリが必要です。デストラクタが呼び出された後、呼び出される前に、オブジェクトのメモリにアクセスするクリーンな方法はありませんfree
。デバッグ malloc は、おそらく開発環境の機能です。
free
編集: をオーバーライドすることで、オブジェクトのプリメモリにアクセスできる場合がありますが、配列にはアクセスできませんdelete
。しかし、それは初心者/中級者向けのアクティビティではありません。
ほとんどの場合、書き込み可能なメモリのバイトをlpStatus
指していません。csStatus.GetLength()
の設定方法のロジックを調べる必要がありますlpStatus
。