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

时间:2015-04-02 07:51:21

标签: c++ qt netbeans

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

我产生的错误如下:

int *ptr;
delete ptr;
delete ptr;

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

任何人都可以告诉我这背后的原因是什么?

2 个答案:

答案 0 :(得分:5)

C ++遵循“你不为你没有要求的东西买单”的原则。这意味着,当Java和C#等语言执行大量运行时检查并在出现错误时抛出明确定义的异常时,C ++不会这样做。在许多情况下,它只是简单地说“如果你做了非法的事情,程序的行为将是不确定的”,并留下它。未定义的行为意味着允许任何事情发生 - 允许程序崩溃,似乎工作,在线订购披萨。

删除未初始化的指针或未由new分配的内容正是一种此类未定义行为诱导操作。在这种情况下,没有给你一个明确的错误完全取决于程序的权利。但是,你的堆可能已经损坏而无法修复。

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

答案 1 :(得分:1)

删除未初始化的指针只是未定义的行为,因此不需要向您提供任何错误消息 - 实际上它可以为您订购披萨。
虽然我很惊讶编译器至少没有发出警告。这应该很容易诊断。