web-dev-qa-db-ja.com

保護されたメモリの読み取りまたは書き込みを試みました

AccessViolationExceptionがアプリケーションでいくつかの異なるスポットでスローされるのを見始めました。私たちのテストサーバーである私の開発用PCでは決して起こりませんでした。また、2台の運用サーバーのうち1台でしか現れませんでした。実稼働サーバーの1つでのみ発生するように思われたため、サーバーにインストールされている.netフレームワークのバージョンを調べ始めました。


(何らかの奇妙な理由により)問題が発生している本番サーバーには2.0 sp2、3.0 sp2、3.5 sp1があり、他の本番サーバーとテストサーバーには2.0 sp1がありました。


私のアプリケーションは2.0フレームワークのみを対象とし、すべてのフレームワークバージョンを運用サーバーからアンインストールし、2.0 sp1のみをインストールすることにしました。これまでのところ、問題を再現することはできませんでした。とても興味深い。

開発PC:コンパクト2.0 sp2、コンパクト3.5、2.0 sp2、3.0 sp2、3.5 sp1テストサーバー:2.0 sp1本番サーバー1:2.0 sp1本番サーバー2:2.0 sp2、3.0 sp2、3.5 sp1

これで、なぜ2.0 sp2を搭載した開発用PCで問題を再現できないのかわかりません。リモートアクセスを使用する一部のソフトウェアでこのアクセス違反が発生する可能性があるという噂を聞きましたが、私の場合はそうですが、実際にリモート処理が行われているときはアクセス違反は発生しません。現時点では2.0 sp1のみを使用しても構いませんが、誰かがこの問題を抱えているかどうか、また新しいバージョンのフレームワークの回避策を見つけたかどうかに興味があります。

いくつかの例外とそのスタックトレースを次に示します。

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
   at ICSharpCode.TextEditor.TextArea.HandleKeyPress(Char ch)
   at ICSharpCode.TextEditor.TextArea.SimulateKeyPress(Char ch)
   at ICSharpCode.TextEditor.TextArea.OnKeyPress(KeyPressEventArgs e)
   at System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
   at System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
   at System.Windows.Forms.Control.WmKeyChar(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
   at System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
   at System.Windows.Forms.Control.DefWndProc(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.TextBoxBase.WndProc(Message& m)
   at System.Windows.Forms.RichTextBox.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
36
Jeremy

同じ問題がありました。 2.0は正常に機能しました。 3.5 sp1までインストールした後、アプリケーションはアクセス違反を取得します。

インストール済み http://support.Microsoft.com/kb/9710 LCGを使用していない場合でも、問題は解決しました。

12
chris

.NET 4.5から.NET 4.5.1にアップグレードした後、同じ問題が発生しました。私にとってそれを修正したのは、このコマンドを実行していたことです:

netsh winsock reset

12
Cocowalla

マイクロソフトはまた、しばらくの間.NET 2.0プラットフォームを悩ませてきた「保護されたメモリの読み取りまたは書き込みを試みました」というエラーを防ぐための修正プログラム(2007年7月2日)もリリースしました。 http://support.Microsoft.com/kb/923028 を参照してください-それが自分に当てはまるかどうかはわかりませんが、チェックアウトしたいかもしれません。

11
Ash

VS 2013の場合、 。NET Framework 4.5.1にはAccessViolationExceptionバグがあります (KB2915689)SQL Serverを扱う場合/ TCP Sockets。 。NET Framework 4.5.2 はこの問題を修正します。

報告されたVS.NET AccessViolationException

保護されたメモリの読み取りまたは書き込みを試みました。多くの場合、これは他のメモリが破損していることを示しています。

3

OLEDBを使用していて、SQL Clientに切り替えて、このエラーで問題を解決しました。

1
Angela

場合によっては、VB.NETに「Option Strict On」を追加し、適切なキャストで見つかったすべての問題を解決することで、この問題を解決できました。

1
Denis

スレッド内にスレッドがないことを確認してください。それが私にとってこのエラーの原因です。このリンクを参照してください: 保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています

1
Joe Brunscheon

WinFormsで「Show」メソッドを呼び出すと、通常「保護されたメモリの読み取りまたは書き込みを試行しました」というメッセージが表示されます。私はチェックしましたが、それらのフォームについて特別なことは何もありません。なぜこれが機能するのかはわかりませんが(誰かが教えてくれるかもしれません)、通常、フォームの「Load」イベントで実行されるコードを「Shown」イベントに移動すると修正され、二度と表示されません。

1
Denis

この問題は、プロジェクト内の混合ビルドプラットフォームDLLが原因である可能性があります。つまり、プロジェクトを任意のCPUにビルドしますが、x86プラットフォーム用にすでにビルドされたプロジェクトにいくつかのDLLがあります。これらは、32ビットと64ビットアーキテクチャの異なるメモリマッピングが原因でランダムクラッシュを引き起こします。すべてのDLLが1つのプラットフォーム用にビルドされている場合、問題を解決できます。安全のために、32ビットx86アーキテクチャが最も互換性があるため、32ビットx86アーキテクチャのbulindingを試してください。

私の場合、COM DLLへの参照を追加するときに「環境変数」で問題が発生しました。

プロジェクトに参照を追加したとき、私はP:\ Coreパスを探していましたが、過去にc:\ coreパスをパス環境変数に追加していました。

したがって、私のコードは最初に間違ったパスを試みていました。私はそれを削除し、DLL参照を登録解除し、(regsvr32)を使用してDLL参照を再登録しました。これが役立つことを願っています。

0
Amit Dodake

こんにちは2つの理由が考えられます。

  1. アンマネージコードがあり、マネージコードから呼び出しています。それがこのコードの実行を妨げています。これらのコマンドを実行して、PCを再起動してください

    cmd:netsh winsockのリセット

開いた cmd.exeおよび実行コマンド"netsh winsock reset catalog"

  1. アンチウイルスはアンマネージコードを有害であると見なしており、このコードの実行を制限していますdisable anti-virus and then check
0
Santokh SIngh

私の場合、共有ライブラリの1つで使用されているフォントがシステムにインストールされていません。

0
emrah ozer

私の場合、IIS server。

0
dogrishin