昨天, 同仁遇到一题空指针问题, 我发现同仁对 C++ 基础不甚了解, 或者是被 Java 给带偏了.
C++ 代码示意
class Cls {
int c;
int add(a,b)
}
Cls :: func(a,b) {
return a+b+this.c
}
异常发生点
在 func 中报告空指针异常, this 指针为空
那么在什么情况下, this 会为空呢?
错误的猜测
同仁猜测是由于对象被析构了, 导致 this 为空
正确答案
如下代码, cls 的值为空指针.
cls->func(a,b)
同仁反驳, 如果 cls 为空, 问题点一定是发生在函数调用的地方, 及空指针报在 cls 的地方.
说明
函数调用是不需要依赖于对象指针的(纯虚函数除外), cls 的值是作为函数的第一个参数被传入, 及 this 值. 为什么之前有提到 Java 的误导, 因为 Java 的所有函数都是纯虚函数. 纯虚函数的调用会依赖于 cls 的值, 如果 cls 为空, 就会在函数调用是报空指针异常.
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于