【发布时间】:2018-11-08 15:10:13
【问题描述】:
我无法理解某事。所以我有一个使用带有 lambda 函数的 std::for_each 的方法。在这个 lambda 函数中,我做了一个 dynamic_cast。这只是一个小背景。此 dynamic_cast 崩溃。我不是在问它为什么会崩溃或如何修复它,因为我知道(我对已删除的对象进行了 dynamic_cast)。我的问题是为什么这只在调试模式下崩溃(在 Qt 中)?
我明白为什么它在调试时崩溃,但我不明白为什么它在发布时不崩溃。几周前我在不同的代码上遇到了类似的问题,但两次崩溃都是分段错误。是否因为 segfault 是一种未定义的行为,并且这种行为在 debug 和 release 之间是不同的?
谢谢。
【问题讨论】:
-
未定义的行为很有趣。它允许编译器将非工作代码转换为“工作”代码。
-
也许有助于查看“未定义”一词的定义。根据 C++ 标准,它意味着对程序的行为没有限制,用简单的英语来说,它意味着没有清楚或精确地显示、描述或限制。因此,未定义的行为意味着您不能期待任何特别的事情。因此:您对代码可能崩溃的期望与“未定义”一词的含义不一致:您使该词具有它不具有的含义。
标签: c++ qt debugging crash segmentation-fault