我的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;
永远不会被打电话。
我已经查看了该字符串指针的所有引用,这是我可以告诉你的内容:
因此,我需要找到一种方法来检查何时在特定对象上调用析构函数。实际上是对象数组。
那么,有没有办法在特定的一组对象上的析构函数(或任何其他方法)上设置断点(我正在使用visual studio 2010专业)?
答案 0 :(得分:1)
如果您是多线程,请考虑为您的字符串成员实现锁定机制...(如果您尚未执行此操作)。很可能一个线程试图写入一个指针,该指针正在另一个线程中重新分配......或类似的东西。多一点代码可以帮助我们在更深层的背景下理解问题。