use*_*001 2 mfc types exception windows-ce
我的应用程序在具有Qualcomm 1GHz Snapdragon处理器的HTC HD2上运行良好但是当尝试在Windows专业模拟器6或具有ARM处理器的PIDION上运行时,它会因数据类型错位异常而崩溃.
任何人都可以帮助我找出崩溃的原因以及如何解决它.
根据这个链接,__unaligned应该解决崩溃但在我的情况下不起作用.
__unaligned不是一个神奇的子弹,你应该只是在你得到一个错位异常时开始扔.首先,您必须确定代码中发生异常的位置,然后查看原因.您是否正在访问未对齐的指针?有点像取一个字节数组或某种类型的缓冲区,然后尝试从一个奇数边界中获取WORD数据或从一个不能被4整除的地址中获取DWORD数据?
BYTE buffer[256];
....
DWORD d = *(DWORD*)buffer[3];
Run Code Online (Sandbox Code Playgroud)
或者你可能有一个奇怪的包装结构?
#pragma pack(push, 1)
struct
{
BYTE b;
DWORD d;
} s;
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)
关键是你必须进行对齐访问.x86允许您进行未对齐的访问,因为它捕获了您的异常,然后执行第二次未对齐的读取. 这是一个快速教程,但请记住这是针对x86的,所以它显示了CPU"修复"了你的错位.ARM并不那么宽容.您必须在ARM上自行重新排列或重新组装数据.
你可能需要对一个对齐的地址进行memcpy并使用那里的数据,但是如果不了解你的代码,就不可能提供更多的洞察力.
| 归档时间: |
|
| 查看次数: |
3054 次 |
| 最近记录: |