C# 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

问题描述

privatevoidshow(refintn,refintp,paramslong[]array){//记录经纬度和方向doubleLonBegin=0;doubleLonEnd=0;doubleLatBegin=0;doubleLatEnd=0;stringloaddirect="";MapXLib.Pointspnt=newMapXLib.Point();  //定义点MapXLib.Pointdpnt=newMapXLib.Point();  //定义点//MapXLib.Featuresftrs=//地图特征集MapXLib.Pointspnts=newMapXLib.Points();//定义点集合MapXLib.Pointsceshipnts=newMapXLib.Points();//路段超速点集合//MapXLib.Featureceshiftr=newMapXLib.Feature();//MapXLib.Featuretextftr=newMapXLib.Feature();MapXLib.Pointtextpnt=newMapXLib.Point();//标注点try{//图层可见性设置newload.Visible=true;lynew.Visible=false;//根据路段超速次数的不同,选择不同的颜色染色。地图属性设置if(array[n]<2*p){axMap1.DefaultStyle.LineColor=System.Convert.ToUInt32(MapXLib.ColorConstants.miColorBlue);//蓝色——较严重}else{axMap1.DefaultStyle.LineColor=System.Convert.ToUInt32(MapXLib.ColorConstants.miColorRed);//红色——严重}axMap1.DefaultStyle.LineWidth=5;boolb_condition=true;//用于判断条件if(b_condition){//查询超速严重或较严重的路段信息stringstr="select起始经度,终止经度,起始纬度,终止纬度,路段方向fromLocationInfowhereLocationID='"+n+"'";SqlDataAdaptermySqlDA=newSqlDataAdapter(str,objConnection);DataSetmyDS=newDataSet();mySqlDA.Fill(myDS,"result");//保存路段起始信息LonBegin=System.Convert.ToDouble(myDS.Tables["result"].Rows[0][0]);LonEnd=System.Convert.ToDouble(myDS.Tables["result"].Rows[0][1]);LatBegin=System.Convert.ToDouble(myDS.Tables["result"].Rows[0][2]);LatEnd=System.Convert.ToDouble(myDS.Tables["result"].Rows[0][3]);loaddirect=myDS.Tables["result"].Rows[0][4].ToString();}spnt.Set(LonBegin,LatBegin);dpnt.Set(LonEnd,LatEnd);//搜索spnt点所在的图元MapXLib.Featuresftrs=axMap1.Layers._Item("修改后cq高速1").SearchAtPoint(spnt,MapXLib.SearchResultTypeConstants.miSearchResultDefault);stringstr_name=ftrs._Item(1).Name;foreach(MapXLib.Featureftrinftrs){pnts=ftr.Parts._Item(1);intm=0;//将起始点中间的点添加到点集里for(intk=1;k<=pnts.Count;k++){if(MidTwoPoints(pnts._Item(k).X,pnts._Item(k).Y,spnt.X,spnt.Y,dpnt.X,dpnt.Y)){ceshipnts.Add(pnts._Item(k),MapXLib.PositionConstants.miPositionTL);m=k;}}//当只找到1个点时候,将这个点前后点添加到点集if(ceshipnts.Count==1){if(m>1||m<pnts.Count){ceshipnts.RemoveAll();ceshipnts.Add(pnts._Item(m-1),MapXLib.PositionConstants.miPositionTL);ceshipnts.Add(pnts._Item(m),MapXLib.PositionConstants.miPositionTL);ceshipnts.Add(pnts._Item(m+1),MapXLib.PositionConstants.miPositionTL);}}//当没有找到点的时候,将该路段所属的两端点添加到点集intcnt=1;if(ceshipnts.Count<1){while(cnt<pnts.Count){if(MidTwoPoints(spnt.X,spnt.Y,pnts._Item(cnt).X,pnts._Item(cnt).Y,pnts._Item(cnt+1).X,pnts._Item(cnt+1).Y)){ceshipnts.Add(pnts._Item(cnt),MapXLib.PositionConstants.miPositionTL);ceshipnts.Add(pnts._Item(cnt+1),MapXLib.PositionConstants.miPositionTL);}cnt=cnt+1;}}//使用完立即释放资源ftrs.Remove(ftr);}//清空点集合pnts.RemoveAll();//文本标注位置选择switch(loaddirect){case"上行":textpnt.Set((spnt.X+dpnt.X)/2,(spnt.Y+dpnt.Y)/2);break;case"下行":textpnt=dpnt;break;case"左行":textpnt.Set((spnt.X+dpnt.X)/2,(spnt.Y+dpnt.Y)/2);break;case"右行":textpnt=dpnt;break;}//如果找到点数大于2,则画线标注出来if(ceshipnts.Count>=2){MapXLib.Featureceshiftr=axMap1.FeatureFactory.CreateLine(ceshipnts,axMap1.DefaultStyle);MapXLib.Featuretextftr=axMap1.FeatureFactory.CreateText(textpnt,n,MapXLib.PositionConstants.miPositionTL,axMap1.DefaultStyle);textftr.Style.TextFont.Size=6;newload.AddFeature(ceshiftr,newMapXLib.RowValues());newload.AddFeature(textftr,newMapXLib.RowValues());}ceshipnts.RemoveAll();}catch(Exceptionex){MessageBox.Show(ex.Message,"错误提示");//在出现异常的情况下,关闭数据库连接objConnection.Close();}}整个程序有时候运行又没有问题,但是大部分是要提示如题所示的错误。上面贴的我认为是出现问题的所在程序段。请帮看看是代码哪里写着急。在线等……

解决方案

解决方案二:

内存泄露,可能内存没有释放
解决方案三:

最近用AE写了一坨代码出现了一样的问题错误指向了Run(newform())原因未知有时候又不会出现有没有使用游标之类的东西.net又不能完全手动释放(不要扯dispose)
解决方案四:

是不是打开了数据库,没有及时关掉啊!,导致内存一直被占用着。使用数据库的原则是当使用完就关掉,下次使用再打开!不要因为后面还需要使用就一直保持连接!try{}catch{}finally{//关掉连接}
解决方案五:

引用2楼onthebox的回复:

最近用AE写了一坨代码出现了一样的问题错误指向了Run(newform())原因未知有时候又不会出现有没有使用游标之类的东西.net又不能完全手动释放(不要扯dispose)

对头,错误指向了Run(newform())原因未知,不知道你解决了这个问题没?
解决方案六:

上次,我写程序也遇到类似问题,记不得怎么解决了……
解决方案七:

引用4楼qq151914528的回复:

引用2楼onthebox的回复:最近用AE写了一坨代码出现了一样的问题错误指向了Run(newform())原因未知有时候又不会出现有没有使用游标之类的东西.net又不能完全手动释放(不要扯dispose)对头,错误指向了Run(newform())原因未知,不知道你解决了这个问题没?

晕,我也碰到这个问题,不知道哪错了,郁闷中。。。。。。。
解决方案八:

引用5楼mays的回复:

上次,我写程序也遇到类似问题,记不得怎么解决了……

兄弟伙,你在回忆一下看是怎么解决的.
解决方案九:

ArcEngien的很多东西是线程或进程单例的,用完必须释放,使用ComReleaser.ReleaseCOMObject方法。。
解决方案十:

汗,我的也是这个问题,一直没有解决,有谁解决过这个问题,帮帮忙吧,不胜感激!
解决方案十一:

我的程序实现了鹰眼功能,结果导致两个地图控件里面的图层都指向了同一块内存空间,在操作的时候,两个地图控件进行了不同的操作,从而导致异常。所以采用硬拷贝内存的方法,效果很好!///<summary>///把地图加到鹰眼里///</summary>privatevoidAddLayerToOverViewMap(){OverViewMapControl.ClearLayers();for(inti=0;i<MainMapControl.LayerCount;i++){IObjectCopyobjectcopy=newObjectCopyClass();objecttoCopyLayer=MainMapControl.get_Layer(i);objectcopiedLayer=objectcopy.Copy(toCopyLayer);ILayerC=(newFeatureLayerClass())asILayer;objecttoOverwriteLayer=C;objectcopy.Overwrite(copiedLayer,reftoOverwriteLayer);OverViewMapControl.AddLayer(C,i);}}
解决方案十二:

楼上的方法好像不行呀,我试过了
解决方案十三:

我现在也遇到了AE鹰眼“尝试读取或写入受保护的内存”的问题,谁能帮忙解决下!谢谢了!
解决方案十四:

我也遇到了,到底怎么回事嘛!!!
解决方案十五:

在网上找了找貌似是MXD文件的设置问题。我把label去掉后没有产生这样的问题~加上却有~~
解决方案:各家软件看来差不多,都要手工释放,还有顺序限制,呵呵。
解决方案:MapInfo也碰到了这个问题,Table.EndAccess()后,用另一个线程叫Table.BeginAccess()就会出现。但是没有ComReleaser这样的object,怎么释放?
解决方案:我在用mapx做开发的时候,也遇到过类似的和内存有关的错误。
解决方案:该回复于2011-04-20 14:09:00被版主删除
解决方案:出售导航电子地图,价格便宜QQ:1548904065
解决方案:我用SuperMap也遇到了!!!!
解决方案:唉,这问题太操蛋了!到底怎么办啊?????
解决方案:检查内存是否未释放!
解决方案:我也遇到了,很急,哪位高手帮下忙哦
解决方案:十楼回答正确!!!
解决方案:昨天我也遇到这种情况了,不过我的程序是在导入数据报错的,是之前有bug影响了数据库,后来怎么都提示这个错误,我就把SQL数据库表结构初始化了,之后就没问题了……哎!不容易啊!
解决方案:一般频繁的进行某个操作的时候,内存的释放会出问题,这主要是垃圾回收功能的不完善,你不用for语句试试,因为for的执行速度太快,注意在循环里,不用的COM对象一定要释放!
解决方案:引用26楼的回复:

一般频繁的进行某个操作的时候,内存的释放会出问题,这主要是垃圾回收功能的不完善,你不用for语句试试,因为for的执行速度太快,注意在循环里,不用的COM对象一定要释放!

对头!
解决方案:引用26楼的回复:

一般频繁的进行某个操作的时候,内存的释放会出问题,这主要是垃圾回收功能的不完善,你不用for语句试试,因为for的执行速度太快,注意在循环里,不用的COM对象一定要释放!

对头!
解决方案:释放频繁使用的com组件!
解决方案:我没有连接数据库但是也遇到这问题了,我是GSMMODEM发短信,主要是在初始化串口的时候偶尔出现这个问题。

时间: 2024-12-22 15:56:09

C# 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。的相关文章

C#调用Haskell时的“尝试读取或写入受保护的内存”问题

最近一直被C#调用Haskell时的"尝试读取或写入受保护的内存"问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected memory,C#调用haskell时的"尝试读取或写入受保护的内存"问题),而且困在其中,越陷超深,无法自拔,差点弃用C#解决我们面临的问题. 问题是这样的,只要在Haskell代码中对字符串进行操作,在C#调用时就会引发异常: An unhandled exception of ty

dll c#-c#调用c++的dll出现尝试读取或写入受保护的内存问题

问题描述 c#调用c++的dll出现尝试读取或写入受保护的内存问题 使用c#调用c++的一个dll.c++的接口函数为: extern "C" __declspec(dllexport)bool __stdcall CreateDetmObject(IDetManager **ppDetManager); 参数IDetManager为一个结构体: struct IDetManager { virtual void __stdcall SetListener(HWND hWnd) = 0

c#尝试读取或写入受保护的内存。这通常指示其他内存已损坏 怎么解决

问题描述 ///<summary>///byte数组转结构///</summary>///<paramname="bytes">byte数组</param>///<paramname="type">结构类型</param>///<returns>转换后的结构</returns>publicstaticobjectBytesToStruct(byte[]bytes,Type

方法-尝试读取或写入受保护的内存。这通常指示其他内存已损坏

问题描述 尝试读取或写入受保护的内存.这通常指示其他内存已损坏 c#调用别人的dll里面的方法出现""尝试读取或写入受保护的内存.这通常指示其他内存已损坏.""!纠结了好久!请大家帮帮我吧 解决方案 如果是调用的非托管dll,则需要这样调用.http://www.cnblogs.com/Charles2008/archive/2010/01/10/1643449.html http://www.cnblogs.com/xugang/archive/2007/12/2

c++-C# 调用C++ dll是出现这样的错误“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

问题描述 C# 调用C++ dll是出现这样的错误"尝试读取或写入受保护的内存.这通常指示其他内存已损坏. 调试时是这样的: SDK上是这样说明的: 我调用这个dll时是这样的: 困扰了很久,希望有大神来看一看,感激不敬 解决方案 C#尝试读取或写入受保护的内存.这通常指示其他内存已损坏.C# 尝试读取或写入受保护的内存 .这通常指示其他内存已损坏.C#尝试读取或写入受保护的内存.这通常指示其他内存已损坏. 解决方案二: 先看是不是你的参数有问题,然后就是数据对不对 解决方案三: 是不是重复调用

c#调c++dll,尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

问题描述 调用时尝试读取或写入受保护的内存.这通常指示其他内存已损坏.不知道是什么情况,网上好多都是c++Long对应c#int,但是我已经转了还是没用,这代码一开始时可以用的,我重装了win7系统后就运行不了了....求大神帮忙c++:extern"C"__declspec(dllexport)BOOL__stdcallTCR_OpenReader(longnPort){if(1==g_iProtocol){g_CardReader.CreateInterface("1.d

关于vb.net读内存的 尝试读取或写入受保护内存 错误,在窗体中以及库中效果不同

问题描述 RT在窗体中使用以下代码,能成功读取内存,其中声明什么的都是改过了,能用DimwndHandleAsIntPtr=FindWindow(Nothing,"步骤2")IfwndHandleThenDimPIDAsLongGetWindowThreadProcessId(wndHandle,PID)IfPIDThenDimhandleAsIntegerhandle=OpenProcess(&H1F0FFF,False,PID)IfhandleThenDimtmpAsInt

求助,C#调用C++dll时提示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

问题描述 C++dll的头文件接口描述如下:#pragmapack(push,1)typedefstructXCtrlStatus{XCtrlStatus(unsignedlongV=0){*reinterpret_cast<unsignedlong*>(this)=V;}unsignedcharERR:1;unsignedcharAUTO:1;unsignedcharRUN:2;unsignedcharDIR:2;unsignedchar:1;unsignedchar:1;unsignedc

winform-C# Winform项目中, 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

问题描述 C# Winform项目中, 尝试读取或写入受保护的内存.这通常指示其他内存已损坏. C/C++ 代码,这个是第三方提供的外部方法(调用"华大HD-900身份证阅读器接口函数"):int HD_Read_BaseInfo(char* pBmpData char *pName char *pSex char *pNation char *pBirth char *pAddress char *pCertNo char *pDepartment char *pEffectData

读取PLC中的结构体时,总是提示:尝试读取或写入受保护的内存。这通常指示其他内存已损坏

问题描述 读取PLC中的结构体时,总是提示:尝试读取或写入受保护的内存.这通常指示其他内存已损坏,但是,我把string[]改成char[]时,可以读到300个单字符,是数据类型的问题么?usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Wi