2012-01-15 34 views
1

这是错误我收到:如何处理C++中的运行时检查失败?

enter image description here

我想知道这一点:

  1. 如何设置try catch块来处理这个错误? 或
  2. 如果try catch是不可能的,在出现错误之前该如何处理该错误?

我在调用成员函数槽指针指向具有错误签名的成员函数时收到此错误。 这个错误当然不会发生,如果我用正确的签名称呼它,但是,我只是想知道如果它发生,我该如何处理它。

+6

修复你的代码,不要试图'处理'一个相当致命的事故。使堆栈指针不平衡会导致大量的随机痛苦,就像损坏的堆一样糟糕。 – 2012-01-15 19:57:34

+0

感谢汉斯,我不必修复我的代码因为它没有这样的错误unles我做它manualy。我只想知道是否可以处理这个问题。编辑,如果它被建议处理这样的erros。 – codekiddy 2012-01-15 20:01:30

+2

@HansPassant:我不同意“关于和堆一样糟糕”:它比糟糕的堆更糟糕。随着堆栈损坏,你甚至无法安全地从你的函数返回。 – celtschk 2012-01-15 20:13:22

回答

2

1.您不能用try/catch来处理该错误。

这是因为try/catch依赖于调用堆栈,并且您的错误是您的调用堆栈已损坏。

2.没有合理的运行时间方法来预先知道代码会破坏堆栈。

这些问题通常是在代码本身投射(函数)指针时谨慎使用。编译器不会允许不正确的函数指针赋值,除非您强制转换。

+0

所以只有处理方法在铸造时要谨慎。谢谢你的解释。 – codekiddy 2012-01-15 20:29:59

0

您不能使用catch函数调用错误的调用约定,因为它在C++术语中不是一个例外。这个错误是一个潜在的致命错误,与程序的结构或制定有关,除非你正在做一些严重的低级别后向兼容特技,否则你不应该试图“处理”它。