gpt4 book ai didi

c++ - 为什么 Qt 应用程序不给我异常或错误?

转载 作者:太空狗 更新时间:2023-10-29 20:24:10 25 4
gpt4 key购买 nike

我是使用 C++ 的 Qt 应用程序的新手。我正在检查崩溃报告,其中我在 Qt 应用程序中创建了一个异常,但它绕过了该语句并成功执行。

我产生的错误如下:

int *ptr;
delete ptr;
delete ptr;

但它没有产生任何错误或异常。

谁能告诉我这背后的原因是什么?

最佳答案

C++ 遵循“你不为你没有要求的东西付出代价”的原则。这意味着 Java 和 C# 等语言会进行大量运行时检查并在出现问题时抛出定义明确的异常,而 C++ 不会这样做。在许多情况下,它只是说“如果你做一些非法的事情,程序的行为将是未定义的”,然后就这样了。未定义的行为实际上意味着任何事情都可以发生——程序可以崩溃,可以正常工作,可以在线订购披萨。

删除未初始化的指针或未由 new 分配的内容正是此类未定义行为诱导操作之一。在这种情况下,不给你一个明确的错误完全符合程序的权利。不过,您的堆很可能已损坏到无法修复的地步。

此外,在您的特定情况下,如果 ptr 的值为 null,则存在 一个 代码实际上定义良好的条件。在空指针上使用 delete 是完全有效的,结果是空操作。这种初始化会自动发生在全局变量上,一些编译器也会在调试构建中对局部变量进行初始化。

关于c++ - 为什么 Qt 应用程序不给我异常或错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29407720/

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