【发布时间】:2011-09-14 13:11:59
【问题描述】:
我注意到了一些奇怪的事情。我希望运行以下代码会产生段错误,但事实并非如此。
void DeadlineTimeOut(const boost::system::error_code& pErrorCode, boost::thread* pThread)
{
std::cout << "Error code: #" << pErrorCode.value()
<< " Message: " << pErrorCode.message() << std::endl;
std::cout << "Thread Address = "
<< pThread << std::endl; // "sth. like 0x33aabc0"
pThread->interrupt();
pThread->join();
delete pThread;
delete pThread;
std::cout << "Stopped execution thread #"
<< pThread->get_id() << std::endl; // "{Not-any-thread}"
}
那么,为什么双重删除是可能的?还打电话给会员?我现在有点迷茫。
【问题讨论】:
-
这是一个完全有效的问题。为什么投反对票?
-
为了更好的阅读做了一些改动,抱歉我一开始错过了这个
-
反对票可能源于使用
boost::thread掩盖了问题这一事实。int*也一样,我们可以简单地将其作为 dup 关闭。 -
@pmr:这是有道理的。像往常一样,如果人们在投反对票时不要忽略那个橙色的小窗口,那就太好了。
-
标签: c++ multithreading memory-management boost