疑难杂症-(android release signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 0xd3d097f0)
产生原因
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);
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 银河驿站
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果