gpt4 book ai didi

c++ - 在控制台关闭事件上释放内存

转载 作者:可可西里 更新时间:2023-11-01 09:59:53 32 4
gpt4 key购买 nike

我有一个 C++ 控制台应用程序,看起来像这样:

SomeObj* obj;

BOOL WINAPI closeHandler(DWORD cEvent)
{
obj->Stop();
while( obj != 0 )
{
Sleep(100);
}
return TRUE;
}

int main(int argc, char* argv[])
{
SetConsoleCtrlHandler( (PHANDLER_ROUTINE)SignalHandler, true );
obj = new SomeObj();
obj->Execute();
delete obj;
return 0;
}

SomeObj::Execute() 本质上是一个循环,它一直运行到调用 SomeObj::Stop() 为止。当我执行 CTRL+C 时,我可以看到应用程序在退出前正确删除了 obj。但是,当我单击控制台窗口上的关闭按钮时,我发现 obj 没有被正确删除。

进一步的调试表明 closeHandler 实际上被调用了,但是 obj 并没有被删除。奇怪的是,如果我在 return 0 行上放置一个断点并尝试关闭控制台窗口,我最终会遇到该断点并看到 obj 已被删除。

我在这里做错了什么?有没有更好的方法来释放控制台窗口关闭事件中的内容?

最佳答案

我猜您的 closeHandler() 例程实际上从未完成,因为它正在等待 obj 变为 0(大概您指的是“NULL”或 C++11 风格的“nullptr”)。删除对象不会将指向它的指针设置为空。老实说,我完全不确定为什么它有这个循环?

关于c++ - 在控制台关闭事件上释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17306095/

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