C++悬空指针造成的崩溃问题排查及解决

出现崩溃问题后,使用gdb打印崩溃时的堆栈,发现崩溃在p->func()附近,即在刚进入func()里面崩溃的,那么此时很可能是由于p已经被释放掉了

为验证或排查此问题,可在p->func()调用之前,将p的值打印出来,
然后再将p指向的对象的析构函数处加上打印,打出当前待析构的对象的地址
若在p->func()调用时,p打印出来的值与所析构的对象地址一样,且先析构,后调用的p->func(),
则说明造成崩溃是由于p已经被释放造成的。

以上是排查方法,欲解决此类悬空指针问题,可参考如下文章:

weak_ptr的使用场景

你可能感兴趣的:(c++,开发语言)