【问题标题】:Lambda function on set_terminate() [closed]set_terminate() 上的 Lambda 函数 [关闭]
【发布时间】:2020-02-03 22:08:45
【问题描述】:

为什么我没有得到任何输出而我的程序还是中止

    terminate_handler lambda = []() ->void {cout << "error";};

    set_terminate(lambda);

    throw 0;

【问题讨论】:

  • 也许你捕捉到了异常,因此不要中止。创建minimal reproducible example
  • 试试cout &lt;&lt; "error\n"。也许也可以&lt;&lt; flush 来衡量。
  • 请注意,cout &lt;&lt; "error\n"(没有flush)可以在终端上工作(因为在这种情况下,cout 默认设置为行缓冲),但如果写入文件或管道(默认为块缓冲)
  • 注意:在终止处理程序中做任何事情都非常有问题。如果您在终止处理程序中,则程序状态很有可能完全被破坏。因此,您可能会进一步破坏事物。如果房子被拆了,通常明智的做法是在离开的时候不要尝试做任何事情。
  • @Mgetz 老实说,我是一名学生,我正在自学 C++,所以我在学习 exit 函数时做了一些尝试,但他们没有工作

标签: c++ lambda set terminate


【解决方案1】:

您必须刷新cout 才能显示某些内容。试试例如:

std::terminate_handler lambda = []() ->void {std::cout << "error" << std::endl;};

或者(如果你不想换行):

std::terminate_handler lambda = []() ->void {std::cout << "error" << std::flush;};

【讨论】:

  • flush是什么意思?
  • 我还是会崩溃,即使我没有调用abort() 函数。 wkernerbase.pdb 未加载
猜你喜欢
  • 2016-09-09
  • 1970-01-01
  • 2022-07-14
  • 1970-01-01
  • 2023-03-09
  • 2020-08-31
  • 1970-01-01
  • 2012-10-28
相关资源
最近更新 更多