试图读取或写入受保护的内存。 这通常表示其他内存已损坏

我希望有人能够启发我,可能会导致这个错误:

试图读取或写入受保护的内存。 这通常表示其他内存已损坏。

我不能真的发布代码,因为这个错误似乎被扔在应用程序的任何区域。 抛出错误之前,应用程序将在12-48小时内运行。 有时它会停在一个看似随机的地方,并抛出上述错误,其他时候整个应用程序停止,我得到一个错误的屏幕说,沿着“有一个致命的错误在…这可能是一个错误在CLR或…“关于PInvoke或其他不相关的信息。 发生这种情况时,所有线程都显示终止,并且没有可用的debugging信息。

简而言之,这是应用程序的function:

它是一个完全用C#编写的multithreading服务器应用程序。 客户端通过套接字连接到服务器。 服务器运行一个虚拟的“环境”,用于客户可以互相交互的环境和环境。 它消耗了相当多的记忆,但我没有看到它泄漏。 它通常消耗大约1.5GB。 我不认为它泄漏,因为内存使用保持相对恒定的应用程序运行的整个时间。 它不断运行的代码来维护环境,即使客户没有做任何事情。 它不使用第三方软件或其他API。 此应用程序使用的唯一外部资源是套接字连接和SQL数据库连接。 它运行在64位服务器上。 我曾尝试在VS2008&VS2010中使用.net 2.0,3.5和4.0在多个服务器上进行debugging,并且问题仍然最终发生。

我试过closures编译器优化和几个微软的hot-fixes。 似乎没有什么使这个问题消失。 如果有人知道任何可能的原因,或者某种方式来确定导致问题的原因,我们将不胜感激。

我刚刚在VS 2013 .NET 4.5中遇到了一个MapInfo DLL的问题。 原来,问题是我把Build for x86平台改成了Any CPU,足以触发这个错误。 把它改回x86是有诀窍的。 可能帮助某人。

最后在WinDBG和SOS的帮助下进行跟踪。 访问冲突是由一些未知的DLL引发的。 原来一款名为“Nvidia Network Manager”的软件正在造成这个问题。 我读了无数次这个问题是如何造成的防火墙或防病毒,我也没有使用,所以我驳回了这个想法。 而且,我假设它不是环境的,因为它发生在使用不同硬件的多台服务器上。 结果我所testing的所有机器都运行“NVidianetworkingpipe理器”。 我相信它安装在其他的主板驱动程序。

希望这可以帮助别人,因为这个问题很长时间以来一直困扰着我的申请。

试着运行这个命令

netsh winsock重置

来源: https : //stackoverflow.com/a/20492181/1057791

最近,当我更改项目的开发服务器时,我遇到了这个问题。 我在代码行中得到了这个错误,我声明了一个新的OracleConnectionvariables。

尝试了很多事情后,包括安装修补程序,我试着改变项目中的引用Oracle.DataAccess和System.Data.OracleClient,它的工作!

当一个项目移动到一台新机器时,我build议你更新在该项目中添加的所有参考。

这个错误不应该发生在托pipe代码中。 这可能解决这个问题:

转到Visual Studiodebugging器绕过此exception:

 Tools menu ->Options -> Debugging -> General -> Uncheck this option "Suppress JIT optimization on module load" 

希望它会有所帮助。

我遇到了,今天发现了一个解决这个例外的问题。 当我试图debugging在抽象类上调用虚拟方法的unit testing(NUnit)时,发生了这种情况。

这个问题似乎与.NET 4.5.1安装。

我已经下载了.NET 4.5.2并安装(我的项目仍然参考.NET 4.5.1),问题就解决了。

解决scheme来源:

https://connect.microsoft.com/VisualStudio/feedback/details/819552/visual-studio-debugger-throws-accessviolationexception

该问题可能是由于项目中的混合构build平台DLL。 即,将您的项目构build到任何CPU,但是已经为x86平台构build的项目中包含一些DLL。 由于32位和64位架构的内存映射不同,这些会导致随机崩溃。 如果所有的DLL都是为一个平台而构build的,那么问题就可以解决了。

我也遇到了Visual Studio 2010的问题。更有意思的是,我在我的解决scheme(控制台应用程序,WPF应用程序,Windows窗体应用程序)中有几个项目,但是只有当我设置的项目types为“控制台应用程序“作为启动项目(即使是那些没有代码或者除了项目模板本身附带的默认代码以外的其他程序集)。

以下更改终于帮助我指出了问题:转到控制台应用程序项目的项目属性 – >转到“debugging”选项卡 – >转到右侧窗格中的“启用debugging器”部分 – >选中“启用非托pipe代码debugging”检查如下面的快照所示。 为什么发生的根本原因仍然是我不知道的。 唯一我观察到的是,前一天晚上在我的机器上安装了很多windows更新,这些更新主要由办公室更新和操作系统更新(超过十几个KB文章)组成。

在这里输入图像描述

您是否尝试closures应用程序的DEP(数据执行保护) ?

它可能是硬件。 这可能是一些复杂的东西,但是我会试图暗示你的线程代码没有用适当的锁保护某些集合(比如字典)。

你运行什么操作系统和服务包?

我面临同样的问题。 我的代码是在AutoCAD 2012中运行的.NET DLL(AutoCAD扩展)。我也使用Oracle.DataAccess,并且我的代码在ExecuteNonQuery()期间抛出了相同的exception。 我幸运地通过更改我使用的ODP的.net版本(即Oracle.DataAccess的2.x)来解决此问题。

好吧,这可能是相当无用的,只是轶事,但…

这个exception是由我们在项目中使用的一些Twain32库一致抛出的,但只会在我的机器上发生。

我试了很多build议的解决scheme在互联网上,无济于事…直到我拔掉了我的手机(它通过USB连接)。

它的工作。

原来,Twain32库试图将我的手机列为一个Twain兼容设备,并且在那个过程中做了一些事情导致了这个exception。

去搞清楚…

这个问题几乎总是一个简单的问题。 代码是坏的。 仅仅通过统计分析,这很less是工具。 数以百万计的人每天都在使用Visual Studio,也许有几个人正在使用你的代码 – 哪一部分代码得到了更好的testing? 我保证,如果这是VS的问题,我们可能已经find了它。

声明的意思是,当你试图访问不属于你的内存的时候,通常是因为你正在做一个损坏的指针,而这个指针来自别的地方。 这就是为什么这是说明的迹象。

在内存损坏的情况下,捕获错误几乎不会导致错误的根本原因。 效果正如你所描述的,看似随意。 你只需要看看通常的罪魁祸首,例如:

  • 未初始化的指针或其他值。
  • 写更多的缓冲区比它的大小。
  • 由不受互斥锁保护的线程共享的资源。

从这样的问题倒退找出根源是非常困难的,因为在问题的产生和问题的发现之间可能发生了太多的事情。

我大多发现查看什么腐败(比如说一个特定的指针)会更容易,然后对代码进行手动静态分析,以查看可能损坏的代码,检查上面显示的通常的罪魁祸首。 但是,即使这样也不会发现长期的问题。

我对VS不够熟悉,但是你可能也想研究一下使用内存跟踪工具(比如valgrind for Linux)的可能性,看它是否能够发现任何明显的问题。

可validation的代码不应该能够破坏内存,所以有一些不安全的事情。 你是否在任何地方使用任何不安全的代码,如缓冲区处理? 另外,关于PInvoke的东西可能并不是无关紧要的,因为PInvoke涉及到非托pipe代码和关联编组的转换。

我最好的build议是附加到一个崩溃的实例,并使用WinDBG和SOS深入了解崩溃时正在发生的事情。 这并不是因为内心的淡淡,而是在这一点上,你可能需要打破更强大的工具来确定到底发生了什么问题。

在我的情况下,文件被打开,因此被locking。

当我尝试使用也在Excel中打开的LinqToExcel加载Excel文件时,我得到它。

这是我所有的事情

  var maps = from f in book.Worksheet<NavMapping>() select f; try { foreach (var m in maps) if (!string.IsNullOrEmpty(m.SSS_ID) && _mappings.ContainsKey(m.SSS_ID)) _mappings.Add(m.SSS_ID, m.CDS_ID); } catch (AccessViolationException ex) { _logger.Error("mapping file error. most likely this file is locked or open. " + ex); } 

我的答案很大程度上取决于你的情况,但我们有一个问题,试图升级一个客户端的.NET应用程序是> 10岁,所以他们可以使其在Windows 8.1上工作。 @ alhazen的回答对我来说是正确的。 该应用程序依赖于客户端不想付费更新的第三方DLL(Pegasus / Accusoft ImagXpress)。 我们重新定位了.NET 4.5的应用程序,但是每次执行以下代码时,都会收到AccessViolationException was unhandled消息:

 UnlockPICImagXpress.PS_Unlock (1908228217,373714400,1341834561,28447); 

为了解决这个问题,我们不得不把下面的post-build事件添加到项目中:

 call "$(DevEnvDir)..\tools\vsvars32.bat" "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\amd64\editbin.exe" /NXCOMPAT:NO "$(TargetPath)" 

这明确指定可执行文件与Data Execution Prevention不兼容。 欲了解更多详情请参阅这里

我也有这个问题。 我在使用visual studio的同时运行不同的解决scheme,closures其他解决scheme并运行目标解决scheme时,它运行良好,没有出现错误。

我在VB.NET中使用的项目中遇到了同样的错误。 检查属性页上的“启用应用程序框架”为我解决了它。