簡體   English   中英

捕獲c ++“訪問沖突寫入異常”?

[英]Catching c++ “Access Violation Writing Exception”?

在我的c ++代碼中,我有一段代碼,它給我一個“訪問沖突寫入位置...”當用戶輸入無效時的例外。

我試圖在我的try / catch塊中捕獲此異常,以便在發生異常時顯示錯誤消息..但由於某種原因它沒有捕獲錯誤。

try {
    // ... some code that causes Access Violation Writing Location Exception
}
catch (...) {
    std::cout << "invalid user input" << endl;
}

我這樣做了,但是當異常發生時,控制台不會顯示我的錯誤消息,但是說有一個

Unhandled exception at 0x0F0B0E9A (msvcr110d.dll) in Example.exe : Access violation writing location

所以看起來我的try / catch塊沒有捕獲異常......

我設置了斷點以確保在try塊中發生異常..而且我100%就是這種情況..

為什么“catch(...)”沒有捕獲Access Violation異常?

不要這樣做!

訪問沖突不是C ++異常。 嘗試終止應用程序的操作系統是因為它執行了無效的操作。

具體來說,它試圖寫入一個沒有訪問權限的內存地址。 這基本上意味着您正在寫入隨機內存,這意味着即使您確實捕獲了此錯誤並向用戶顯示了一條很好的錯誤消息,它也可能並不總是有效。 有時,程序可能最終寫入程序的其他部分,而不是寫入您沒有寫入權限的內存。 這不會引發訪問沖突,因此不會檢測到問題。 它只會破壞你的程序。

唯一正確的方法是驗證您的用戶輸入。 必須檢查用戶輸入是否為程序可以安全處理的形式。 如果不是,則必須更正或中止,並向用戶顯示錯誤。 您必須在自己的代碼中執行此操作, 然后應用程序執行的操作非常糟糕,以至於操作系統不得不嘗試終止它。

的,有處理訪問沖突的一種方式,但正如我前面所說,這不是正確的解決您的問題,所以我認為沒有理由來闡述就可以了。

暫無
暫無

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

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