当前位置:  技术问答>linux和unix

总线出错 (核心转储)

    来源: 互联网  发布时间:2016-12-16

    本文导语:   运行下面代码的时候总会出现 总线错误(核心转储)的错误        memset(sIP,0,sizeof(sIP)); iPort = 0; bInit = false; //ceshi--- strcpy(sIP,"10.10.12.162"); iPort = 1111; struct sockaddr_in &addr = (struct sockaddr_in &)m_addrPeer; ...

 运行下面代码的时候总会出现 总线错误(核心转储)的错误
       memset(sIP,0,sizeof(sIP));
iPort = 0;
bInit = false;

//ceshi---
strcpy(sIP,"10.10.12.162");
iPort = 1111;

struct sockaddr_in &addr = (struct sockaddr_in &)m_addrPeer;
addr.sin_family = AF_INET;
addr.sin_port   = htons(iPort);
inet_aton(sIP, (in_addr*)&addr.sin_addr.s_addr);//这一句

调试结果:
Program received signal SIGBUS, Bus error
  si_code: 1 - BUS_ADRALN - Invalid address alignment. 


为啥?

|
我来回答~

这个问题是因为,Linux操作系统会对于 非对齐内存访问的进程,发送SIGBUS的信号,你的程序,接收到这个信号后,进行coredump,并退出了。

Windows操作系统允许 非地址对齐的内存访问(会损失性能),所以程序在Windows操作系统下,不会出现app error。

内存地址对齐,对于增加cache命中率,从而间接提高应用程序的性能有很大帮助。

你如果想要在不改变当前编译链接环境和操作系统的情况下,使得程序不出现地址对齐问题,可以想办法,使得你的数据结构进行内存地址的对齐。例如,进行一些字节的填充等等。

具体请参考我的博客:
http://blog.csdn.net/iterzebra/article/details/6232079
http://blog.csdn.net/iterzebra/article/details/6232039

|
类型不对,试试
inet_aton(sIP, (in_addr*)&addr.sin_addr.s_addr);//这一句
改为
inet_aton(sIP, &addr.sin_addr);



|
试试inet_aton(sIP, (in_addr*)&addr.sin_addr);//这一句

另外,struct sockaddr_in &addr = (struct sockaddr_in &)m_addrPeer
有点怪怪的,试试
struct sockaddr_in &addr = (struct sockaddr_in *)&m_addrPeer;

|
struct sockaddr_in &addr = (struct sockaddr_in &)m_addrPeer;
--------------------------------------------------------
这里是取地址还是声明引用?取地址用&,声明指针使用*,强制转换也需要*

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于arm总线驱动的疑惑
  • 如何查看系统中是否有iic总线驱动
  • 请问牛人关于 IIC 总线频率的问题
  • Java轻型消息总线 Werx
  • 数据总线的时序为什么如此混乱??
  • 消息队列、服务总线 zbus
  • 控制域总线API CANpie
  • 如何设置2410的总线带宽寄存器为8位
  • 企业服务总线 JeeESB
  • 企业服务总线 ServiceMix
  • 企业服务总线 OpenESB
  • 这样操作地址总线会冲突吗??
  • 企业服务总线消息框架 Mule ESB
  • ================== hefuhua 您做过PCI总线驱动吗?===================
  • 请教 怎么对地址总线的某一位进行控制?
  • 怎样获取物理内存在地址总线中的起始地址?
  • Java企业服务总线 Celtix
  • 企业服务总线 Fuse ESB
  • 基于 Guava 的事件总线 Otto
  • 企业服务总线 JBoss ESB


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3