這是錯誤我收到:如何處理C++中的運行時檢查失敗?
我想知道這一點:
- 如何設置
try catch
塊來處理這個錯誤? 或 - 如果
try catch
是不可能的,在出現錯誤之前該如何處理該錯誤?
我在調用成員函數槽指針指向具有錯誤簽名的成員函數時收到此錯誤。 這個錯誤當然不會發生,如果我用正確的簽名稱呼它,但是,我只是想知道如果它發生,我該如何處理它。
這是錯誤我收到:如何處理C++中的運行時檢查失敗?
我想知道這一點:
try catch
塊來處理這個錯誤? 或try catch
是不可能的,在出現錯誤之前該如何處理該錯誤?我在調用成員函數槽指針指向具有錯誤簽名的成員函數時收到此錯誤。 這個錯誤當然不會發生,如果我用正確的簽名稱呼它,但是,我只是想知道如果它發生,我該如何處理它。
1.您不能用try
/catch
來處理該錯誤。
這是因爲try
/catch
依賴於調用堆棧,並且您的錯誤是您的調用堆棧已損壞。
2.沒有合理的運行時間方法來預先知道代碼會破壞堆棧。
這些問題通常是在代碼本身投射(函數)指針時謹慎使用。編譯器不會允許不正確的函數指針賦值,除非您強制轉換。
所以只有處理方法在鑄造時要謹慎。謝謝你的解釋。 – codekiddy 2012-01-15 20:29:59
您不能使用catch
函數調用錯誤的調用約定,因爲它在C++術語中不是一個例外。這個錯誤是一個潛在的致命錯誤,與程序的結構或制定有關,除非你正在做一些嚴重的低級別後向兼容特技,否則你不應該試圖「處理」它。
修復你的代碼,不要試圖'處理'一個相當致命的事故。使堆棧指針不平衡會導致大量的隨機痛苦,就像損壞的堆一樣糟糕。 – 2012-01-15 19:57:34
感謝漢斯,我不必修復我的代碼因爲它沒有這樣的錯誤unles我做它manualy。我只想知道是否可以處理這個問題。編輯,如果它被建議處理這樣的erros。 – codekiddy 2012-01-15 20:01:30
@HansPassant:我不同意「關於和堆一樣糟糕」:它比糟糕的堆更糟糕。隨着堆棧損壞,你甚至無法安全地從你的函數返回。 – celtschk 2012-01-15 20:13:22