产生原因

android armabi-v7a架构中存在内存对齐保护,当读取非内存对齐地址时,会发出上述中断。
ARM状态的指令长度是32位的,对操作数据起始地址为4字节对齐位置。
Thumb状态的指令长度是16位的(也可能为32位),对操作数据起始地址为4字节对齐位置?。

举例说明

unsigned char* data = (unsigned char*)malloc(16);
memset(data,0,16);
int i = 0;
for(i = 0;i<16;i++)
{
	int temp = *(data + i);
}

解决方法

使用中间变量的方式

int temp;
memcpy(&temp,data,sizeof(int));
/************/
int data_size = 12;
unsigned char* temp = NULL;
temp = malloc(data_size);
memcpy(temp,data,data_size);