讨论一下 总线错误(bus error)
我们经常会发现有两种内存转储(core dump)
一种是段错误(segment error)通常是在一个非法的地址上进行取值赋值操作造成。
一种是总线错误(bus error)通常时指针强制转换,导致CPU读取数据违反了一定的总线规则。
下面请大家讨论一下总线错误
有例子如下sizeof(int)==4:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i[5];
int j;
i[0]=65536+2;
i[1]=65536*3+4;
j=*((int *)((char *)i+2)); /* 1 bus error */
printf("size of int is %d\nj=%d",sizeof(int),j);
return 0;
}
我们姑且不考字节序问题,不管j结果是几.
在一般RISC的CPU上,一般的unix机器上都会出现bus error。
而在windows机器上,我用了vc的cl borland的bcc32和gnu的gcc编译执行都没问题。
大家有兴趣可以讨论一下