libevent的段错误!

基于libevent2.0.21版本编写了一个服务器端程序,在读消息回调函数内调用了这段代码evutil_socket_t fd = bufferevent_getfd(bev)。但会偶发一个问题,当服务器端和客户端完成连接后,客户端更换了IP发送数据上来,触发了服务器端的读消息回调函数,代码在跑到evutil_socket_t fd = bufferevent_getfd(bev)这段代码时会发生段错误导致服务器端程序崩溃。

问题代码如下:
cout<<"4.1"<evutil_socket_t fd = bufferevent_getfd(bev); //获取bufferevent中的fd
cout<<"4.2"<

输出结果如下
4.1
Segmentation fault (core dumped)

请问如何解决这个问题?

生成dump文件,调试定位

libevent2.0.21,你这版本比较老了,是2012年的。可以在官网下载最新的版本2.1.12试试;
如果还是不行,生成core文件,然后gdb调试定位一下。

建议你用GDB 去你的coredump文件打断点看下哪个地方出错的,是不是空指针造成的

这篇文章讲的很详细,请看:libevent做一个简单的服务器应答程序