0

我的 C++ 项目中有一个讨厌的错误。有一堂课

class SomeClass {
    ...
    std::string *someString;
    ...
}

这是一个构造函数

SomeClass(...) {
    ...
    someString = new std::string("");
    ...
}

问题是,之后我只使用该特定字符串进行操作,而不修改指针值。我一直为该字符串分配不同的字符串,例如

*someString = "whatever";
someString->assign("whatever");
*someString += 'a';

应用程序是多线程的,并且有一个非常讨厌的故障。在某些时候,应用程序崩溃。调试器显示变量 someString 有一个 BAD POINTER。我不知道这怎么可能

delete someString;

永远不会被调用。

我查看了该字符串指针的所有引用,这就是我可以告诉你的:

  1. 永远不会调用该指针上的 delete 。
  2. 该指针永远不会分配给其他任何东西(以后可能会被删除)。
  3. 该字符串的指针值永远不会以任何方式更改(调试器显示“Bad Ptr”)。
  4. 其他类变量看起来像他们应该的那样好。

因此,我需要找到一种方法来检查何时在特定对象上调用析构函数。实际上是对象数组。

那么,有没有办法在特定对象集的析构函数(或任何其他方法)上设置断点(我正在使用 Visual Studio 2010 专业版)?

4

1 回答 1

1

如果您使用多线程,请考虑为您的字符串成员实现锁定机制......(如果您还没有这样做)。极有可能一个线程试图写入一个指针,该指针正在另一个线程中重新分配......或类似的东西。多一点代码将帮助我们在更深的背景下理解问题。

于 2013-05-06T11:16:59.273 回答