簡體   English   中英

嘗試讀取或寫入受保護的內存

[英]Attempted to read or write protected memory

我已經開始看到在我的應用程序中的幾個不同位置拋出了 AccessViolationException。 它從未發生在我的開發電腦,我們的測試服務器上。 它也只出現在我們的 2 台生產服務器中的 1 台上。 因為它似乎只發生在我們的一台生產服務器上,所以我開始查看服務器上安裝的 .net 框架版本。


我發現(出於某種奇怪的原因)有問題的生產服務器有 2.0 sp2、3.0 sp2 和 3.5 sp1,而另一個生產服務器和測試服務器有 2.0 sp1。


我的應用程序僅針對 2.0 框架,決定從生產服務器卸載所有框架版本並僅安裝 2.0 sp1。 到目前為止,我還沒有能夠重現這個問題。 很有意思。

開發電腦:compact 2.0 sp2、compact 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 的開發電腦上重現該問題,我想不通。 我聽說有傳言說這種訪問沖突可能發生在一些使用遠程處理的軟件上,我的就是這樣做的,但是當遠程處理實際發生時,訪問沖突從未發生過。 我現在只使用 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)

從 .NET 4.5 升級到 .NET 4.5.1 后,我遇到了同樣的問題。 為我修復的是運行此命令:

netsh winsock reset

我有同樣的問題。 2.0 運行良好。 安裝最多 3.5 sp1 后,應用程序會出現訪問沖突。

安裝了http://support.microsoft.com/kb/971030並且我的問題解決了,即使我沒有使用 LCG。

Microsoft 還發布了一個修補程序(2007 年 7 月 2 日),以防止出現一段時間以來一直困擾 .NET 2.0 平台的錯誤“嘗試讀取或寫入受保護的內存”。 查看http://support.microsoft.com/kb/923028 - 不確定它是否適用於您,但您可能想查看一下。

對於 VS 2013, .NET Framework 4.5.1在處理 SQL Server / TCP 套接字時也有一個AccessViolationException錯誤(KB2915689)。 升級到.NET Framework 4.5.2可以解決此問題。

報告 VS.NET AccessViolationException

嘗試讀取或寫入受保護的內存。 這通常表明其他內存已損壞。

在某些 WinForms 上調用“Show”方法時,我通常會得到“嘗試讀取或寫入受保護的內存”。 我查了一下,這些表格沒有任何特別之處。 我不知道為什么會這樣(也許有人可以告訴我),但通常將在表單的“Load”事件中執行的代碼移動到“Shown”事件為我修復它,我再也看不到它了。

檢查以確保線程中沒有線程。 這就是導致我出現此錯誤的原因。 請參閱此鏈接: 嘗試讀取或寫入受保護的內存。 這通常表明其他內存已損壞

在某些情況下,在 VB.NET 中添加“Option Strict On”並解決它通過正確轉換發現的所有問題已經為我解決了這個問題。

您好 有兩個可能的原因。

  1. 我們有非托管代碼,我們從托管代碼中調用它。 這是阻止運行此代碼。 嘗試運行這些命令並重新啟動您的電腦

    cmd:netsh winsock 重置

打開cmd.exe並運行命令"netsh winsock reset catalog"

  1. 防病毒軟件將非托管代碼視為有害並限制運行此代碼禁用防病毒軟件然后檢查

在我的情況下,當我為 IIS 服務器中的應用程序池設置“啟用 32 位應用程序”=True 時,此問題已得到解決。

問題可能是由於項目中的混合構建平台 DLL。 即,您將項目構建到任何 CPU,但在項目中已經為 x86 平台構建了一些 DLL。 由於 32 位和 64 位架構的不同內存映射,這些將導致隨機崩潰。 如果所有 DLL 都是為一個平台構建的,那么問題就可以解決。 為了安全起見,嘗試為 32 位 x86 架構構建,因為它是最兼容的。

我正在使用 OLEDB 並切換到 SQL 客戶端,它解決了這個錯誤的問題。

在我的情況下,系統中未安裝共享庫之一中使用的字體。

在我的情況下,我在添加對我的 COM DLL 的引用時遇到了“環境變量”的問題。

當我添加對我的項目的引用時,我正在尋找P:\\Core路徑,而我過去已將c:\\core路徑添加到路徑環境變量中。

所以我的代碼首先嘗試了錯誤的路徑。 我刪除了它並取消注冊了 DLL 引用,然后使用 (regsvr32) 重新注冊了我的 DLL 引用。 希望這可以幫助。

在創建導致此問題的新項目時,我忘記添加 EntityFramework。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM