gpt4 book ai didi

c++ - 堆栈展开期间未调用两个析构函数之一

转载 作者:行者123 更新时间:2023-11-27 23:32:19 25 4
gpt4 key购买 nike

我有一个用 MS Visual C++ 2005 编写的应用程序。它在客户端的计算机上失败了。我无法重现失败;我要分析的只是应用程序创建的日志。在应用程序中,我有以下片段:

class EntranceLoggerForFunc
{
public:
EntranceLoggerForFunc()
{
WriteToLog("EntranceLoggerForFunc");
}
~EntranceLoggerForFunc()
{
WriteToLog("~EntranceLoggerForFunc");
}
}

void Func()
{
EntranceLoggerForFunc logger;
....
if (<some comdition>)
Func();
....
}

void Func2()
{
try
{
Func();
}
catch(...)
{
WriteToLog("Exception happened");
}
}

应用程序使用 key /EHa 编译(使用 SEH 异常启用 C++ 异常。

在日志中我看到以下内容:

EntranceLoggerForFunc入口记录器ForFunc~EntranceLoggerForFunc异常发生

换句话说,在Func() 的某处发生了异常;并被 Func2() 捕获。但是为什么在堆栈展开期间只调用了两个对象 EntranceLoggerForFunc 的一个析构函数?

现在我只有以下版本:堆栈以某种方式损坏(很可能是由于导致异常的相同错误操作造成的),这就是其中一个析构函数不起作用的原因。

还有其他版本吗?

最佳答案

另一种可能性是 WriteToLog 是在第 4 次调用时抛出异常的方法。

关于c++ - 堆栈展开期间未调用两个析构函数之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com