ARM处理器上的数据类型错位异常(0xA0000002)

时间:2010-09-27 06:31:40

标签: exception mfc types windows-ce

我的应用程序在具有Qualcomm 1GHz Snapdragon处理器的HTC HD2上运行良好,但是当尝试在具有ARM处理器的Windows专业仿真器6或PIDION上运行时,它会因数据类型错位异常而崩溃。

任何人都可以帮助我找出崩溃的原因以及如何解决它。

根据this链接,__unaligned应解决崩溃,但在我的情况下不起作用。

1 个答案:

答案 0 :(得分:8)

__未对齐不是一个神奇的子弹,当你得到一个错位异常时,你应该简单地开始扔。首先,您必须确定代码中发生异常的位置,然后查看原因。您是否正在访问未对齐的指针?有点像取一个字节数组或某种类型的缓冲区,然后尝试从一个奇数边界获取WORD数据或从一个不能被4整除的地址的DWORD数据?

BYTE buffer[256];
....
DWORD d = *(DWORD*)buffer[3];

或许你有一个奇怪的包装结构?

#pragma pack(push, 1)
struct
{
  BYTE b;
  DWORD d;
} s;
#pragma pack(pop)

关键是你必须进行对齐访问。 x86允许您进行未对齐访问,因为它捕获了您的异常,然后执行第二次未对齐读取。 Here's a quick tutorial,但请记住这是针对x86的,因此它会显示CPU“修复”错位。 ARM并不那么宽容。您必须在ARM上自行重新排列或重新组装数据。

你可能需要对一个对齐的地址进行memcpy并使用那里的数据,但是如果不了解你的代码,就不可能提供更多的洞察力。