PJT*_*PJT 0 c++ bus-error
我想了解为什么我在使用此代码时出现总线错误.
int main() { int p=34; int *pp= (int *) ((char *)&p+1); cout<<*pp<<"\n"; return 0; }
pax*_*blo 10
毫无疑问,这是一个对齐问题.在许多体系结构中,某些类型必须正确对齐,例如4字节整数必须在4字节边界上开始.
如果您访问非对齐数据,某些体系结构将无关紧要,其他体系结构将运行速度较慢,而其他体系结构(例如在这种情况下)将陷入尖叫堆中.
当您创建的整数p,它将被正确地在堆栈上的这是一个正确的倍数的地址一致.
p
通过在字节上移动该地址,并将其取消引用int,您将导致该地址SIGBUS.
int
SIGBUS
Oracle上的此链接显示了对齐要求.简而言之:
归档时间:
16 年 前
查看次数:
1588 次
最近记录:
13 年,2 月 前