什么是c语言段错误,c – 什么可能导致此代码段错误

编程入门 行业动态 更新时间:2024-10-07 18:23:02

什么是c语言段<a href=https://www.elefans.com/category/jswz/34/1771449.html style=错误,c – 什么可能导致此代码段错误"/>

什么是c语言段错误,c – 什么可能导致此代码段错误

在下面的代码中,我在行中看到了一个段错误,表示signaling_thread _-> Send(this,id,data);,这是从PeerConnectionProxy类的析构函数调用的.

bool PeerConnectionProxy::Send(uint32 id, talk_base::MessageData* data) {

if (!signaling_thread_)

return false;

signaling_thread_->Send(this, id, data);

return true;

}

在gdb中运行,一旦我执行了(gdb)步骤,我就会得到段错误和这个堆栈跟踪:

Program received signal SIGSEGV, Segmentation fault.

0x00000000 in ?? ()

(gdb) bt

#0 0x00000000 in ?? ()

#1 0xa782eed4 in webrtc::PeerConnectionProxy::Send (this=0xab889e80, id=6, data=0xbfffc1e8)

at third_party/libjingle/source/talk/app/webrtc/peerconnectionproxy:219

#2 0xa782e91a in ~PeerConnectionProxy (this=0xab889e80, __in_chrg=)

at third_party/libjingle/source/talk/app/webrtc/peerconnectionproxy:145

...

在该行之前断开,我检查,如预期的那样,signaling_thread_是非空的,就像这个和数据一样.我对于可能导致段错误或使堆栈最终达到0x00000000感到困惑.代码只通过析构函数在代码路径上进行段错误.从许多其他地方调用Send函数没有问题.

更新2011-12-08:

逐步打开stepi和反汇编,我明白了:

0xa772eed2 219 signaling_thread_->Send(this, id, data);

0xa772eea4 <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 8b 45 08 mov 0x8(%ebp),%eax

0xa772eea7 <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 8b 40 0c mov 0xc(%eax),%eax

0xa772eeaa <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 8b 00 mov (%eax),%eax

0xa772eeac <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 83 c0 40 add $0x40,%eax

0xa772eeaf <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 8b 08 mov (%eax),%ecx

0xa772eeb1 <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 8b 45 08 mov 0x8(%ebp),%eax

0xa772eeb4 <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 8d 70 04 lea 0x4(%eax),%esi

0xa772eeb7 <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 8b 45 08 mov 0x8(%ebp),%eax

0xa772eeba <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 8b 40 0c mov 0xc(%eax),%eax

0xa772eebd <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 8b 55 10 mov 0x10(%ebp),%edx

0xa772eec0 <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 89 54 24 0c mov %edx,0xc(%esp)

0xa772eec4 <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 8b 55 0c mov 0xc(%ebp),%edx

0xa772eec7 <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 89 54 24 08 mov %edx,0x8(%esp)

0xa772eecb <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 89 74 24 04 mov %esi,0x4(%esp)

0xa772eecf <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: 89 04 24 mov %eax,(%esp)

=> 0xa772eed2 <_zn6webrtc19peerconnectionproxy4sendejpn9talk_base11messagedatae>: ff d1 call *%ecx

ecx是0x0所以这就是使它成为段错误但是我仍然不明白发生了什么.该行的其他代码看起来并不接触ecx,除非我只是读错了.

更多推荐

什么是c语言段错误,c – 什么可能导致此代码段错误

本文发布于:2024-02-13 16:28:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1760126.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:错误   语言   代码

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!