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

Kha*_*han 3 c++ qt netbeans

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

我生成的错误如下:

int *ptr;
delete ptr;
delete ptr;
Run Code Online (Sandbox Code Playgroud)

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

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

Rei*_*ica 5

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

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

此外,在您的特定情况下,如果代码实际上是明确定义的,则有一个条件 - 如果值为ptrnull.delete在空指针上使用它是完全有效的,结果是无操作.这种初始化自动发生在全局变量中,一些编译器也在调试版本中为局部变量执行此操作.