2014-10-03 63 views
0

我使用Visual Studio 2012 Express調試64位應用程序。比方說,兩個「富」和「酒吧」是一個C類的一些成員函數'this'指針在調用成員函數後發生變化

「富」的樣子:

void foo() { 
    bar(); // change to this->bar() works! 
} 

我的程序崩潰,因爲當它走了進去「這個」指針被改變'酒吧'。問題可以通過更改爲'this-> bar()'來解決。

任何想法我應該如何調試這個問題?謝謝

+0

你是什麼意思'這個指針改變了'?你的意思是它不再指向包含foo的類的實例嗎?或者一個不同的實例? – harmic 2014-10-03 02:00:45

+0

請發佈一個最小但完整的例子 – 2014-10-03 02:18:27

回答

0

你是說下面的代碼有效嗎?

void foo() { 
    this->bar(); // instead of bar() 
} 

所以,假定FOO()是調用另一個成員函數bar()對於同一對象的成員函數,檢查兩兩件事:(1)是否存在另一非成員函數bar()具有相同作爲成員函數bar()的簽名(如果存在),更改非成員函數名稱op總是使用this->作爲成員函數調用的限定,作爲一種良好的編程習慣(2)當您爲某個對象實例或指針調用foo對象實例,檢查對象是否已正確分配和初始化。