Exception ARM处理器上的数据类型未对齐异常(0xA0000002)

Exception ARM处理器上的数据类型未对齐异常(0xA0000002),exception,mfc,types,windows-ce,Exception,Mfc,Types,Windows Ce,我的应用程序在配备高通1GHz Snapdragon处理器的HTC HD2上运行良好,但当尝试在配备ARM处理器的Windows professional emulator 6或PIDION上运行时,它会因数据类型未对齐异常而崩溃 有谁能帮我找出它崩溃的原因和解决方法吗 根据link的说法,\uuuu unaligned应该可以解决崩溃问题,但在我的情况下不起作用。\uu unaligned并不是一个魔弹,当出现未对齐异常时,您应该简单地开始抛出它。首先,您必须确定在代码中发生异常的位置,然后查

我的应用程序在配备高通1GHz Snapdragon处理器的HTC HD2上运行良好,但当尝试在配备ARM处理器的Windows professional emulator 6或PIDION上运行时,它会因数据类型未对齐异常而崩溃

有谁能帮我找出它崩溃的原因和解决方法吗


根据link的说法,
\uuuu unaligned
应该可以解决崩溃问题,但在我的情况下不起作用。

\uu unaligned并不是一个魔弹,当出现未对齐异常时,您应该简单地开始抛出它。首先,您必须确定在代码中发生异常的位置,然后查看原因。您正在访问未对齐的指针吗?例如,获取某种字节数组或缓冲区,然后尝试从奇数边界获取字数据,或者从不能被4整除的地址获取双字数据

BYTE buffer[256];
....
DWORD d = *(DWORD*)buffer[3];
或者你有一个结构,你有奇怪的包装

#pragma pack(push, 1)
struct
{
  BYTE b;
  DWORD d;
} s;
#pragma pack(pop)
关键是必须进行对齐访问。x86只允许进行未对齐的访问,因为它捕获了异常,然后执行第二次未对齐的读取,尽管要记住这是针对x86的,所以它显示了CPU为您“修复”失调。手臂不那么宽容。您必须自己在ARM上重新排列或重新组装数据


您可能需要对对齐的地址执行memcpy,并使用其中的数据,但如果您对代码一无所知,则无法提供更多信息。

谢谢ctacke。我找到了崩溃的代码,并使用未对齐的宏修复了它;其中,_value&_type为无符号int64,_buffer为无符号char*。这个代码不是我返回的,我只做了桌面应用程序到移动应用程序的移植。我认为有很多地方会进行这种类型的转换,因此找到了一种方法来修复它,而不必使用try&error方法。移植写得不好的桌面代码是他的工作经常发生的地方。