我在我的C++項目中有一個討厭的錯誤。還有一類如何在特定對象的特定方法中設置斷點?
class SomeClass {
...
std::string *someString;
...
}
這裏是一個構造函數
SomeClass(...) {
...
someString = new std::string("");
...
}
而且事情是,事後我只與特定的字符串操作,而無需修改poiner值。我分配給該字符串不同的字符串的時候,像
*someString = "whatever";
someString->assign("whatever");
*someString += 'a';
多線程應用程序,有一個得了很嚴重的故障。在某個時候,應用程序崩潰。調試器顯示變量someString具有A BAD POINTER。我不知道這是如何可能的
delete someString;
從來沒有呼籲。
我看了該字符串的指針所有引用和這裏就是我可以告訴你:
- 刪除該指針永遠不會被調用。
- 指針永遠不會被分配給其他任何東西(它可能在以後被刪除)。
- 該字符串的指針值不會以任何方式改變(調試器顯示'Bad Ptr')。
- 其他類變量看起來像他們應該是。
因此,我需要找到一種方法來檢查何時在特定對象上調用析構函數。事實上,對象的數組。
那麼,有沒有一種方法來設置一個特定的對象集上的析構函數(或任何其他方法)的斷點?(我正在處理visual studio 2010 proffessional)?
你知道有條件的斷點嗎? – hansmaad 2013-05-06 11:05:02
爲什麼你需要一個指向std :: string的指針......這有危險。 – fritzone 2013-05-06 11:10:27
在賦值/複製構造函數上放置斷點並查看這些操作的輸出是否正確。 – shivakumar 2013-05-06 11:12:26