none
保護されているメモリに読み取りまたは書き込み操作を行おうとしました RRS feed

  • 質問

  • いつもお世話になっております。環境WinXP、VS2005、C#2.0
    突然以下のようなダイアログが表示され悩まされております。
    TreeViewと出ていますが、確かにTreeViewを操作する画面で落ちたのですが、
    それ以外の情報が無く、どうしたものかと思っております。
    何度同じ操作をしても再現しません。
    イベントビューワにも何も出力されませんでした。
    Unsafeコードも使っていないつもりです。
    (unsafe,Intptrで検索しても何もヒットしない)
    何か解決の糸口はないものでしょうか。
    ************** 例外テキスト **************
    System.AccessViolationException: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
       場所 System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
       場所 System.Windows.Forms.NativeWindow.DefWndProc(Message& m)
       場所 System.Windows.Forms.Control.DefWndProc(Message& m)
       場所 System.Windows.Forms.Control.WndProc(Message& m)
       場所 System.Windows.Forms.TreeView.WndProc(Message& m)
       場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    2011年8月8日 0:38

回答

  • > TreeViewと出ていますが、確かにTreeViewを操作する画面で落ちたのですが、
    > それ以外の情報が無く、どうしたものかと思っております。

    どんなコードを書いたか、どんな操作をしたら落ちたかなどの
    情報がないとこのスレッド読んだ人もわからないと思います。
    • 回答としてマーク Myon 2011年8月15日 12:23
    2011年8月8日 7:46
  • コールスタックから何らかのヒントがあるかどうかお聞きしたかったのですが、やはり難しいでしょうか・・・

    はい。コールスタックからは特定できません。

    ツリービューに何らかのウィンドウメッセージが送られた際、そのデフォルトウィンドウプロシージャーなどで処理されるどこかで落ちています。
    しかしながら、コールスタックからは何か特定する情報はないため、どういう状況か推測することが困難です。
    現状では、少なくともマネージコード実行中ではないので、ネイティブの何かが悪いとしかいえません。(ウィンドウフックが絡んでいる可能性もあるので、作っているアプリ自体に問題があるとも断定できません)


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク Myon 2011年8月15日 12:23
    2011年8月8日 13:28
    モデレータ
  • 何度同じ操作をしても再現しません。

    もしかしたらメモリー不良の可能性もあります。memtest86のようなツールでメモリーテストをしてみてはどうでしょうか?

    Windows Vista以降ですと、Windowsにメモリーテストツールが標準搭載されているのですが、XPとのことですので。

    • 回答としてマーク Myon 2011年8月15日 12:23
    2011年8月8日 14:34
  • >Unsafeコードも使っていないつもりです。
    >(unsafe,Intptrで検索しても何もヒットしない)
    P/InvokeもCOM InteropもMarshal等unmanaged codeの連携に利用するclassも利用していないのですか?
    純粋に.NET Frameworkが提供しているclass(Marshal等除く)しか利用していないのでしょうか?

    似たような現象がいくつか見つかります。
    参考にしてみてください。
    http://social.msdn.microsoft.com/Search/en-US?query=UnsafeNativeMethods.CallWindowProc%20corrupt


    • 回答としてマーク Myon 2011年8月15日 12:23
    2011年8月8日 15:32
  • 外部DLLはZIP圧縮するモジュール、「ICSharpCode.SharpZipLib.dll」を利用していることに気づきました。
    これがUnmanagedでアクセスしている可能性はありますが、

    この DLL は C# の Managed code で書かれています。
    ざっとソースコードで探してみましたが、DllImport もないようなので、API には頼っていないとみられます。
    この DLL が原因とみるには、可能性が低いように思えます。

    この手のたまに落ちるといったものは、自分のアプリで解放タイミングとか、リソースの排他とかがきちんとできていない可能性が一番高く、あとはライブラリやフレームワークのバグの可能性、導入しているセキュリティソフトのバグ・相性の可能性、OS のコンポーネント・コントロールのバグの可能性も疑うところです。
    正直なところ、今の段階で第三者が可能性にあたりをつけるのは難しいと思われます。(一般的な問題とも、特定の環境・コードの問題ともいえない)

    再現できるソースコード、プログラムを十分に使える人でないと解析できませんので、いろいろな可能性を疑って実証していくとか、机上デバッグとしてこのタイミングでこれがくるとまずいとか、そういったことでいろいろと Try していただくしかありません。
    (もしくは、ソースコードを開示して問題調査してもらえるような業者があるかどうか)

    あとはシンボルファイル(pdb)を生成しておいて、落ちたときのダンプファイルをとってもらって、ダンプファイルを解析するかですが、うまく解析できる保障がないこと、解析には相応の知識・スキルが求められることという点で即効性があるかどうかわかりません。(説明も大変なので書籍を買って読んでなりそうですが)


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク Myon 2011年8月15日 12:23
    2011年8月15日 1:01
    モデレータ
  • ご回答を頂きながら返信が遅れまして申し訳ありませんでした。

    あれから様子を見ておりましたが、別のPCでも同じエラーが発生したとの報告を受けましたので、

    ハードウェアの問題ではないのではと考えております。

    Kozz様にご紹介していただいたサイトも見ているのですが、

    手がかりが見つからない状態です。

    外部DLLはZIP圧縮するモジュール、「ICSharpCode.SharpZipLib.dll」を利用していることに気づきました。

    これがUnmanagedでアクセスしている可能性はありますが、

    再現性が本当に低いのでなんとも難しい問題です。。。

     

    • 回答としてマーク Myon 2011年8月15日 12:23
    2011年8月15日 0:24

すべての返信

  • > TreeViewと出ていますが、確かにTreeViewを操作する画面で落ちたのですが、
    > それ以外の情報が無く、どうしたものかと思っております。

    どんなコードを書いたか、どんな操作をしたら落ちたかなどの
    情報がないとこのスレッド読んだ人もわからないと思います。
    • 回答としてマーク Myon 2011年8月15日 12:23
    2011年8月8日 7:46
  • mars12様、ご回答ありがとうございます。

    コードは大量に書いておりますので、公開するにもどの部分を公開するべきかがわからない状態です。

    操作はツリービューをクリックした時だったと思うのですが、

    再現性が無く、はっきりとこの操作とは言えない状態です。

    コールスタックから何らかのヒントがあるかどうかお聞きしたかったのですが、

    やはり難しいでしょうか・・・

     


    2011年8月8日 12:35
  • コールスタックから何らかのヒントがあるかどうかお聞きしたかったのですが、やはり難しいでしょうか・・・

    はい。コールスタックからは特定できません。

    ツリービューに何らかのウィンドウメッセージが送られた際、そのデフォルトウィンドウプロシージャーなどで処理されるどこかで落ちています。
    しかしながら、コールスタックからは何か特定する情報はないため、どういう状況か推測することが困難です。
    現状では、少なくともマネージコード実行中ではないので、ネイティブの何かが悪いとしかいえません。(ウィンドウフックが絡んでいる可能性もあるので、作っているアプリ自体に問題があるとも断定できません)


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク Myon 2011年8月15日 12:23
    2011年8月8日 13:28
    モデレータ
  • 何度同じ操作をしても再現しません。

    もしかしたらメモリー不良の可能性もあります。memtest86のようなツールでメモリーテストをしてみてはどうでしょうか?

    Windows Vista以降ですと、Windowsにメモリーテストツールが標準搭載されているのですが、XPとのことですので。

    • 回答としてマーク Myon 2011年8月15日 12:23
    2011年8月8日 14:34
  • >Unsafeコードも使っていないつもりです。
    >(unsafe,Intptrで検索しても何もヒットしない)
    P/InvokeもCOM InteropもMarshal等unmanaged codeの連携に利用するclassも利用していないのですか?
    純粋に.NET Frameworkが提供しているclass(Marshal等除く)しか利用していないのでしょうか?

    似たような現象がいくつか見つかります。
    参考にしてみてください。
    http://social.msdn.microsoft.com/Search/en-US?query=UnsafeNativeMethods.CallWindowProc%20corrupt


    • 回答としてマーク Myon 2011年8月15日 12:23
    2011年8月8日 15:32
  • ご回答を頂きながら返信が遅れまして申し訳ありませんでした。

    あれから様子を見ておりましたが、別のPCでも同じエラーが発生したとの報告を受けましたので、

    ハードウェアの問題ではないのではと考えております。

    Kozz様にご紹介していただいたサイトも見ているのですが、

    手がかりが見つからない状態です。

    外部DLLはZIP圧縮するモジュール、「ICSharpCode.SharpZipLib.dll」を利用していることに気づきました。

    これがUnmanagedでアクセスしている可能性はありますが、

    再現性が本当に低いのでなんとも難しい問題です。。。

     

    • 回答としてマーク Myon 2011年8月15日 12:23
    2011年8月15日 0:24
  • 外部DLLはZIP圧縮するモジュール、「ICSharpCode.SharpZipLib.dll」を利用していることに気づきました。
    これがUnmanagedでアクセスしている可能性はありますが、

    この DLL は C# の Managed code で書かれています。
    ざっとソースコードで探してみましたが、DllImport もないようなので、API には頼っていないとみられます。
    この DLL が原因とみるには、可能性が低いように思えます。

    この手のたまに落ちるといったものは、自分のアプリで解放タイミングとか、リソースの排他とかがきちんとできていない可能性が一番高く、あとはライブラリやフレームワークのバグの可能性、導入しているセキュリティソフトのバグ・相性の可能性、OS のコンポーネント・コントロールのバグの可能性も疑うところです。
    正直なところ、今の段階で第三者が可能性にあたりをつけるのは難しいと思われます。(一般的な問題とも、特定の環境・コードの問題ともいえない)

    再現できるソースコード、プログラムを十分に使える人でないと解析できませんので、いろいろな可能性を疑って実証していくとか、机上デバッグとしてこのタイミングでこれがくるとまずいとか、そういったことでいろいろと Try していただくしかありません。
    (もしくは、ソースコードを開示して問題調査してもらえるような業者があるかどうか)

    あとはシンボルファイル(pdb)を生成しておいて、落ちたときのダンプファイルをとってもらって、ダンプファイルを解析するかですが、うまく解析できる保障がないこと、解析には相応の知識・スキルが求められることという点で即効性があるかどうかわかりません。(説明も大変なので書籍を買って読んでなりそうですが)


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク Myon 2011年8月15日 12:23
    2011年8月15日 1:01
    モデレータ
  • Azulean様

    本当にご親切に教えていただき、ありがとうございました。

    DLLの中まで見てくださったのですね。

    おっしゃるとおり、いろいろな方向から見ていくしかなさそうです。

     

     

     

    2011年8月15日 12:23