wince 本机异常错误,已解决,求解释……
最近做一个wince的程序,用C#编写,.net 2.0
因为要处理网络包,里面有一些变量往数组里面填值,或者从收到的网络包里取值到变量里。
其中有一句是这样的:
*(int *)(Packet + NowOffset) = htonl(BindSetInfo.ItemInfo[i].ItemCount);
即把ItemCount的值转成网络字节序后,放入Packet + NowOffset的位置。因为Packet是byte类型指针,ItemCount是int型,所以我把它转成了int型指针后再赋值。
但就是这一句出现了本机异常0x80000002
---------------------------------------
最后我用这种方法暂时解决了:
int IntData = htonl(BindSetInfo.ItemInfo[i].ItemCount);
memcpy(Packet + NowOffset, &(IntData), sizeof(int));
中间用了个Int型变量做中转,然后memcpy进去……
可是为什么不能:
*(int *)(Packet + NowOffset) = htonl(BindSetInfo.ItemInfo[i].ItemCount);
求大神解释……
这段代码在PC上编译的时候,工作是正常的,是wince的限制么?
谢过~
[解决办法]
嗯,体系结构的问题吧
你看下Packet + NowOffset的值是多少
也许你的CPU不支持非对齐访问
[解决办法]
byte是两个字节,int是4个字节,数据可能溢出,你单步调试看下代码
[解决办法]
没办法。只能尽量避免。
如果无法避免,小数据量可以自己做个函数按byte复制。
大数据量就用memcpy。