簡體   English   中英

為什么Qt應用程序不會給我異常或錯誤?

[英]Why Qt application does not give me exception or error?

我是使用C ++的Qt應用程序的新手。 我正在檢查崩潰報告,我在Qt應用程序中創建了一個異常,但它繞過了語句並成功執行。

我生成的錯誤如下:

int *ptr;
delete ptr;
delete ptr;

但它沒有產生任何錯誤或異常。

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

C ++遵循“你不為你沒有要求的東西付錢”的原則。 這意味着,當Java和C#等語言執行大量運行時檢查並在出現錯誤時拋出明確定義的異常時,C ++不會這樣做。 在許多情況下,它只是簡單地說“如果你做了非法的事情,程序的行為將是不確定的”,並留下它。 未定義的行為意味着允許任何事情發生 - 允許程序崩潰,似乎工作,在線訂購披薩。

刪除未初始化的指針或未被new分配的東西恰恰是一種這樣的未定義行為誘導操作。 在這種情況下,沒有給你一個明確的錯誤完全取決於程序的權利。 但是,您的堆可能已損壞而無法修復。

此外,在您的特定情況下,如果ptr值為null,則代碼實際上定義良好時會有一個條件。 在空指針上使用delete是完全有效的,結果是無操作。 這種初始化自動發生在全局變量中, 一些編譯器也在調試版本中為局部變量執行此操作

刪除未初始化的指針只是未定義的行為,因此不需要向您提供任何錯誤消息 - 事實上,它可以讓您訂購披薩。
雖然我很驚訝編譯器至少沒有產生警告。 這應該很容易診斷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM