客戶端 `Ctrl+C` 斷開後,服務端崩潰:
*** glibc detected *** ./server: double free or corruption (fasttop): 0x09a2f028 ***
Backtrace:
./server[0x80497b8]
./server[0x80495ac]
...
同一指針被 `free`/`delete` 了兩次。常見場景:
gdb ./server
(gdb) run
# 觸發崩潰後
(gdb) bt
# 查看堆疊幀 0x80497b8、0x80495ac 對應的源碼行
(gdb) info line *0x80497b8
(gdb) info line *0x80495ac
#include <memory>
std::unique_ptr conn = std::make_unique(fd);
// 自動管理生命週期,杜絕 double free
if (ptr) { free(ptr); ptr = NULL; }
std::vector conns; // 值語義,自動析構
// 或
std::vector> conns;
用 gdb 定位崩潰地址對應的源碼行,改用智能指針或嚴格所有權管理,徹底解決 double free。