C#语言 byte数组反序列化为结构体时出错,请C#大神帮忙看下 20

百度知道的排版实在很让人崩溃,如果下边的代码已经变成了一行,就请看附带的图片吧!结构体定义:[StructLayout(LayoutKind.Sequential)]pu... 百度知道的排版实在很让人崩溃,如果下边的代码已经变成了一行,就请看附带的图片吧!

结构体定义:
[StructLayout(LayoutKind.Sequential)]
public struct Space_DATA{
public byte uST;
public byte uSM;
public byte uET;
public byte uEM;
};
public struct A_SPACE_DATA{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 7)]
public Space_DATA[] sData;
};

反序列化代码:
A_SPACE_DATA timeSpace=new A_SPACE_DATA();
int size = Marshal.SizeOf(timeSpace.GetType()); //程序运行到这里后闪退,无报错
uint nLen = (uint)size;
IntPtr structPtr = Marshal.AllocHGlobal(size);
try{
Marshal.Copy(szBuf, 2 + 8 - 1, structPtr, size);
timeSpace = (A_SPACE_DATA)Marshal.PtrToStructure(structPtr, timeSpace.GetType());
}
catch(ArgumentException)
{
throw;
}
finally
{
Marshal.FreeHGlobal(structPtr);
}

上边的代码有闪退现象,无奈改成了这样:
A_SPACE_DATA timeSpace=new A_SPACE_DATA();
int size = 7*Marshal.SizeOf(typeof(Space_DATA)); //程序运行到这里顺利通过
uint nLen = (uint)size;
IntPtr structPtr = Marshal.AllocHGlobal(size);
try{
Marshal.Copy(szBuf, 2 + 8 - 1, structPtr, size);
timeSpace = (A_SPACE_DATA)Marshal.PtrToStructure(structPtr, timeSpace.GetType());//此句执行完timeSpace.sData=null,相当于没执行
}
catch (ArgumentException)
{
throw;
}
finally{
Marshal.FreeHGlobal(structPtr); //执行到这里后再次闪退
}

请C#大神帮忙看下这两次闪退各是什么原因,有什么解决办法?
展开
 我来答
sxl348362749
2013-09-03
知道答主
回答量:2
采纳率:0%
帮助的人:2883
展开全部
个人好 吗,,还没,umfhbfdjnd
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式