所以我正在调试一个显示Segfault的程序。我运行gdb并从回溯中看到(this)的值在调用时发生了变化。
调用函数的类型为
Foo::funcName1() const {
return Bar::funcName2()->calledFunc();
}
被调用函数的格式为
Foo2::calledFunc() const {
/*
Some stuff
*/
}
根据我的回溯
0x00007ff456a9ec9f in Blah::Meh::funcName1() const (this=0x1f59b40)
0x00007ff44fee181c in Foo2::calledFunc() const (this=0x0)
这怎么可能发生?
答案 0 :(得分:1)
回答Q的标题:你正在调用不同对象的方法。 this
指向当前对象,因此可以在那里进行更改。 Here is an example.
要回答您的特定段错误:我假设funcName2
返回nullptr
。在调用calledFunc
之前,您应该检查一下。
答案 1 :(得分:0)
冒着听起来多余的风险......
this
指向您正在调用方法的对象。如果你有两个对象,并且在它们上面调用一个方法,它们都会有一个不同的this
指针。
在你的代码中,funcName2()返回一个NULL指针。因此,您在NULL对象上调用方法。即便如此,该方法只会返回一些内容,但由于您已经取消引用了NULL指针,因此您的程序行为现在未定义。
您应该确保不要取消引用NULL指针。两个选项:
funcName2()
不返回NULL
funcName2()
的返回值不是NULL
。