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

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

我生成的错误如下:

int *ptr;
delete ptr;
delete ptr;

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

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

解决方法:

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

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

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

上一篇:使用NetBeans无法在Maven项目中为@author值生成JavaDoc


下一篇:如何使用Maven插件将jar部署到Raspberry Pi 2上