最近在复写一个WebServer服务器程序,运行程序后只要连接建立后一段时间没有请求页面,就会出现如下错误
jyhlinux@ubuntu:~/share/JWebServer$ ./server -p 8888
double free or corruption (out)
Aborted
分析可能是内存泄露或者二次析构的问题,
因为是一段时间后出现的问题,所以我猜测是定时器这个模块的问题,有没有可能是多次close的问题,于是我gdb调试了一下找不到问题,只好通过将每个类的代码和原来代码进行对比,最后才在threadpool.h找到问题,创建线程误写为
m_threads = new pthread_t(m_thread_number); // 创建一个线程id的内存空间
这会导致,后面按数组方式访问第一个后面的线程时非法访问内存地址
应改为
m_threads = new pthread_t[m_thread_number];
心得体会:
遇到内存泄漏可以定位 new
和free
附近的代码