C ++:*这会改变调用之间的值

时间:2015-09-29 13:27:16

标签: c++ debugging gdb

所以我正在调试一个显示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)

这怎么可能发生?

2 个答案:

答案 0 :(得分:1)

回答Q的标题:你正在调用不同对象的方法。 this指向当前对象,因此可以在那里进行更改。 Here is an example.

要回答您的特定段错误:我假设funcName2返回nullptr。在调用calledFunc之前,您应该检查一下。

答案 1 :(得分:0)

冒着听起来多余的风险......

this指向您正在调用方法的对象。如果你有两个对象,并且在它们上面调用一个方法,它们都会有一个不同的this指针。

在你的代码中,funcName2()返回一个NULL指针。因此,您在NULL对象上调用方法。即便如此,该方法只会返回一些内容,但由于您已经取消引用了NULL指针,因此您的程序行为现在未定义。

您应该确保不要取消引用NULL指针。两个选项:

  • funcName2()不返回NULL
  • 在尝试对其进行任何操作之前,请确保您的调用函数验证funcName2()的返回值不是NULL