一.描述问题 当托管代码调用非托管代码的时候,经常会出现如下报错:“尝试读取或写入受保护的内存.这通常指示其他内存已损坏”. 二.原因分析 由于非托管代码的内存指针的回收是由非托管代码自身手动完成的,而不是像托管代码一样有统一的垃圾回收机制,比如.NET的GC. 所以对于托管代码的调用方来说无法控制其内存回收.以上问题的产生原因很可能是托管代码调用了已经被回收的非托管对象.封装 的好一点的非托管代码一般都会有内存释放的接口供外部调用,这样调用方就可以管理非托管代码的内存回收. 三.解决方法 尽量…
Sql server2012连接Sql server2008时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误.(provider:SSLProvider,error:0-接收到的消息异常,或格式不正确.) 以前连接是正常的,就这两天连不上了.(没有耐心的直接看末尾解决办法) 错误消息如下: 1.尝试读取或写入受保护的内存.这通常指示其他内存已损坏.(System.Data) 2.已成功与服务器建立连接,但在登陆过程中发生错误.(provider:SSLProvider,error:0…
项目中,使用了sql server2012数据库,服务端是2012,客户端如果是2008的话,就会报错: 索引错误. 没办法,就安装了sql server2012客户端.但是还是报错,无法连上数据库服务器. 提示错误为尝试读取或写入受保护的内存.这通常指示其他内存已损坏. (System.Data) 当再次尝试连接时,Sql server 2012 Management Studio 就崩溃了. 网上搜索了一下关键字才找到解决办法: win7 sqlserver2012内存读取,win7 sql…
来源:http://ajxfxb.blog.163.com/blog/static/56675086201411634336878/ 作者是:没完没了的工作 asp.net报错“尝试读取或写入受保护的内存.这通常指示其他内存已损坏”的解决办法   调试的时候突然之间一连数据库就崩, 结果把连接单拉出来试试还是不行.   错误信息: “System.AccessViolationException”类型的未经处理的异常在System.Data.dll 中发生    其他信息:尝试读取或写入受保护的…
if(pFeature!=null) { IPoint pnt = pFeature.Shape as IPoint; pntArray.Add(pnt); } 调试是pntArray.Add(pnt)显示 尝试读取或写入受保护的内存.这通常指示其他内存已损坏.,网上的资料说是COM对象在循环中没有来得及释放造成的. 因为是在循环中,以为是pFeature没有释放造成的,所以就释放了一下,结果还是这个问题. 后来仔细找,发现pFeature是Polygon类型的,当初想当然的以为可以将Polyg…
从事件查看器中发现,IIS不定期崩溃并重启的现象.抓取crash dump文件后,发现能够看到异常,但没有堆栈信息(主要是只会看托管代码的堆栈,非托管的不清楚.),问题表现及dump日志的截图如下: 从dump文件的异常信息分析看,System.AccessViolationException,尝试读取或写入受保护的内存.这通常指示其他内存已损坏.   根据微软的分析,当前应用或第三方系统与Windows系统的数据执行保护策略有冲突造成异常. 可以尝试禁用Windows的数据执行保护功能,操作步…
系统debug时出现错误,System.AccessViolationException: 尝试读取或写入受保护的内存.这通常指示其他内存已损坏. Attempted to read or write protected memory. This is often an indication that other memory is corrupt 从网上查阅,大多都是说因为调用C++等dll等等,但系统中确实没有关于其他dll的调用,很是郁闷.最后查得设置配置参数即可. 解决办法: Tools…
今日遇到这样一个问题,用vs2010调试C#代码时,只要代码一运行到跟数据库关联的地方时,编译器就报错误,给的提示如:调试器已附加,要继续需要分离什么的,咋一看还以为是vs中调试器设置的问题,可后来仔细一检查,发现调试器没什么问题,那到底是什么原因呢,有时候这样的一些问题真的很让人头疼!!思索了很久,觉得有没有可能是以为数据库连接什么的,就这样,我写了一个只有一两句数据库连接的代码的doom,发现系统报: 尝试读取或写入受保护的内存.这通常指示其他内存已损坏 原来如此!既然代码没问题,vs也没问…
由于易语言与c#做的DESC加解密方式,返回的数据不一致,所以,我用易语言写了一个dll,供c#调用, 结果在post的时候,有时候能正确返回数据,有时候则不能正常返回,而是返回空数据(c#没有做异常处理) 后来, 在c#端抛出异常后发现,原来返回空值,都已经报错了(提示:尝试读取或写入受保护的内存 .这通常指示其他内存已损坏.) 在网上查了,在c#调用 dll的时候,用指针的方式,就没有再出现问题. /// <summary> /// 这是易语言的DESC加密解密的dll /// </…
在C#中调用别人的DLL的时候有时候出现 尝试读取或写入受保护的内存 .这通常指示其他内存已损坏. 在传值的时候还是用指针,再在C#中做转换就好了. 解决办法: [DllImport("APPLISTCC.dll")]public static extern string TestFunc1(string param1); string ret1 = TestFunc1("text"); 改成: [DllImport("APPLISTCC.dll"…