我在我的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