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 --------------------编程问答-------------------- 调试下,应该是内存大小没有计算对,具体哪里出错,你先贴出来。 --------------------编程问答--------------------
我是想把结构体转换成字节数组让后用udpclient.send()发送。如果是用序列化的话,好像是吧对象序列化成流....这个流该怎么实现udp通信呢.... --------------------编程问答--------------------
UnsafeAddrOfPinnedArrayElement是获取指定数组中指定索引处的元素的地址...在这里该怎么用呢...能不能给个详细一点的代码...目的是为了方便udp传送....而实现把字节数组和结构体的转换.. --------------------编程问答--------------------
流不就可以直接从中读取byte[]吗?
--------------------编程问答-------------------- 楼主 你怎么解决的啊。。。我也遇到这个问题了。。。
补充:.NET技术 , C#