【发布时间】:2009-03-05 19:28:29
【问题描述】:
我在调试一个应用程序时遇到了以下代码:
int Func()
{
try
{
CSingleLock aLock(&m_CriticalSection, TRUE);
{
//user code
}
}
catch(...)
{
//exception handling
}
return -1;
}
m_CriticalSection 是 CCrialSection。
我发现用户代码抛出了一个异常,使得 m_CriticalSection 根本没有被释放。这意味着由于某些原因堆栈已损坏,因此展开失败。
我的问题是: 1) 在哪些不同情况下堆栈展开可能会失败?
2) 有哪些不同的异常可能引发堆栈展开失败。
3) 我可以通过将 CSingleLock 放在 try 块之外来解决这个问题吗?
谢谢,
【问题讨论】:
-
如果你提到抛出了什么样的异常,如果它实际上在 catch(...) 处被捕获,将会有所帮助。
-
为什么不在用户代码周围放置 try ... catch 块呢?