当前位置:编程学习 > C#/ASP.NET >>

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

 /// <summary>
        /// byte数组转结构
        /// </summary>
        /// <param name="bytes">byte数组</param>
        /// <param name="type">结构类型</param>
        /// <returns>转换后的结构</returns>
        public static object BytesToStruct(byte[] bytes, Type type)
        {
            //得到结构的大小
            int size = Marshal.SizeOf(type);
           // Log(size.ToString(), 1);
            //byte数组长度小于结构的大小 不能转换则返回 null
            if (size > bytes.Length)
            {
                //返回空
                return null;
            }
            //分配结构大小的内存空间
            IntPtr structPtr = Marshal.AllocHGlobal(size);
            //将byte数组拷到分配好的内存空间
            Marshal.Copy(bytes, 0, structPtr, size);
            //将内存空间转换为目标结构
            object obj = Marshal.PtrToStructure(structPtr, type);
            //释放内存空间
            Marshal.FreeHGlobal(structPtr);
            //返回结构
            return obj;
        }



出现错误:c#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
是怎么回事,该怎么改呢? --------------------编程问答-------------------- 为何不用二进制序列化
--------------------编程问答-------------------- 而且完全没有必要用marshal.copy 之类,直接
intptr ptr = Marshal..::.UnsafeAddrOfPinnedArrayElement --------------------编程问答--------------------   参考 --------------------编程问答-------------------- http://www.camnpr.com/archives/293.html --------------------编程问答-------------------- 调试下,应该是内存大小没有计算对,具体哪里出错,你先贴出来。 --------------------编程问答--------------------
引用 1 楼 hdt 的回复:
为何不用二进制序列化


我是想把结构体转换成字节数组让后用udpclient.send()发送。如果是用序列化的话,好像是吧对象序列化成流....这个流该怎么实现udp通信呢.... --------------------编程问答--------------------
引用 2 楼 hdt 的回复:
而且完全没有必要用marshal.copy 之类,直接
intptr ptr = Marshal..::.UnsafeAddrOfPinnedArrayElement


UnsafeAddrOfPinnedArrayElement是获取指定数组中指定索引处的元素的地址...在这里该怎么用呢...能不能给个详细一点的代码...目的是为了方便udp传送....而实现把字节数组和结构体的转换.. --------------------编程问答--------------------
引用 6 楼 o7Eleven 的回复:
引用 1 楼 hdt 的回复:为何不用二进制序列化

我是想把结构体转换成字节数组让后用udpclient.send()发送。如果是用序列化的话,好像是吧对象序列化成流....这个流该怎么实现udp通信呢....

流不就可以直接从中读取byte[]吗?
--------------------编程问答-------------------- 楼主  你怎么解决的啊。。。我也遇到这个问题了。。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,