侧边栏壁纸
博主头像
银河驿站博主等级

行动起来,活在当下

  • 累计撰写 85 篇文章
  • 累计创建 17 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

疑难杂症-(android release signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 0xd3d097f0)

Administrator
2022-06-17 / 0 评论 / 0 点赞 / 854 阅读 / 971 字

产生原因

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);
0

评论区