为什么Qt应用程序不给我异常或错误? 我在QT应用程序中使用C++。我在检查崩溃报告时,在Qt应用程序中创建了一个异常,但它绕过了该语句并成功执行

为什么Qt应用程序不给我异常或错误? 我在QT应用程序中使用C++。我在检查崩溃报告时,在Qt应用程序中创建了一个异常,但它绕过了该语句并成功执行,c++,qt,netbeans,C++,Qt,Netbeans,我生成的错误如下所示: int *ptr; delete ptr; delete ptr; 但它没有产生任何错误或异常 有谁能告诉我这背后的原因吗?删除未初始化的指针只是未定义的行为,因此不需要向您发送任何错误消息-事实上,它将允许您订购比萨饼。 尽管我很惊讶编译器至少没有产生警告。这应该很容易诊断 < P> C++遵循“你不为你所要求的而付出”的原则。这意味着当java和C语言这样的语言在出错时做很多运行时检查并抛出明确的异常时,C++就不这样做。在许多情况下,它只是简单地说“如果你做了一些

我生成的错误如下所示:

int *ptr;
delete ptr;
delete ptr;
但它没有产生任何错误或异常


有谁能告诉我这背后的原因吗?

删除未初始化的指针只是未定义的行为,因此不需要向您发送任何错误消息-事实上,它将允许您订购比萨饼。
尽管我很惊讶编译器至少没有产生警告。这应该很容易诊断

< P> C++遵循“你不为你所要求的而付出”的原则。这意味着当java和C语言这样的语言在出错时做很多运行时检查并抛出明确的异常时,C++就不这样做。在许多情况下,它只是简单地说“如果你做了一些非法的事情,程序的行为将是不确定的”,然后就不做了。未定义的行为意味着任何事情都被允许发生——程序被允许崩溃、出现工作、在线订购比萨饼

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


另外,在您的特定情况下,如果
ptr
的值为null,则有一个条件可以很好地定义代码。在空指针上使用
delete
是完全有效的,结果是不可操作。全局变量会自动进行初始化,有些编译器在调试版本中也会对局部变量执行此操作。

它可能的
ptr
包含
0
。程序在执行此操作时不需要执行任何特定操作,因为它是未定义的。