空指针很容易发生段错误,但是当使用空指针指向一个不访问成员变量的成员函数时是不会发生段错误
。所以后面如果在此成员函数中加入访问成员变量的逻辑时会引发段错误。
如图
当我使用空指针调用addEvent时触发了段错误,这是出现段错误时的函数栈。
由于每次在pthread_mutex_lock这个函数出现问题,后来我就在这个Mutex类内加入日志,把pthread_mutex_t这个变量的地址打印了出来,地址为0x8,很明显可以看出这个地址有问题。然后猜想时不是这个类提前析构导致的,就在此类的析构函数加入了日志,但未打印,这就让人很迷惑。后来我就想会不会addEvent的第一个参数this本身是不是就是空的,所以我在调用addEvent的变量加了一句assert,果然触发了。
总结:
除非能100%确定不为空,否则还是加一层判断为好