我的 C++ 项目中有一个讨厌的错误。有一堂课
class SomeClass {
...
std::string *someString;
...
}
这是一个构造函数
SomeClass(...) {
...
someString = new std::string("");
...
}
问题是,之后我只使用该特定字符串进行操作,而不修改指针值。我一直为该字符串分配不同的字符串,例如
*someString = "whatever";
someString->assign("whatever");
*someString += 'a';
应用程序是多线程的,并且有一个非常讨厌的故障。在某些时候,应用程序崩溃。调试器显示变量 someString 有一个 BAD POINTER。我不知道这怎么可能
delete someString;
永远不会被调用。
我查看了该字符串指针的所有引用,这就是我可以告诉你的:
- 永远不会调用该指针上的 delete 。
- 该指针永远不会分配给其他任何东西(以后可能会被删除)。
- 该字符串的指针值永远不会以任何方式更改(调试器显示“Bad Ptr”)。
- 其他类变量看起来像他们应该的那样好。
因此,我需要找到一种方法来检查何时在特定对象上调用析构函数。实际上是对象数组。
那么,有没有办法在特定对象集的析构函数(或任何其他方法)上设置断点(我正在使用 Visual Studio 2010 专业版)?