捕捉 c++ "Access Violation Writing Exception" ?
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块内。我百分百相信这是真的。
为什么"catch(…)"没有捕获访问冲突异常?
不要这样做!
访问冲突不是c++异常。这是操作系统试图终止应用程序,因为它做了一些无效的事情。
具体来说,它试图写一个它没有权限访问的内存地址。这基本上意味着您正在写入随机内存,这意味着即使您捕获了这个错误并向用户显示了一个不错的错误消息,它也可能不总是工作。有时,程序可能会对程序的其他部分进行写操作,而不是写入没有写权限的内存。这不会引发访问冲突,因此不会检测到问题。它只会破坏你的程序。
唯一正确的方法是验证您的用户输入。必须检查用户输入的形式是否为程序可以安全处理的形式。如果不是,您必须纠正它,或者中止,并向用户显示一个错误。你必须在你自己的代码中这样做,在你的应用程序做一些糟糕的事情之前,操作系统被迫尝试终止它。是的,是处理访问违规的一种方法,但正如我上面所说的,这不是解决你问题的正确方法,所以我认为没有理由详细说明它。
相关文章:
- 为重写std::exception的库生成swig接口时出错
- 什么是 std::exception::what() 以及为什么要使用它?
- 链表"exception thrown"
- 为什么程序员同时使用 std::bad_alloc 和 std::exception.是否 std::例外 仅是不够的
- C++ broken_promise exception
- 请参阅在 Visual Studio 2019 中捕获 std::exception 时对函数模板实例化消息的引用
- QVTKWidget SetRenderWindow() with PCLVisualizer Exception
- Writing Char to Arduino EEPROM
- 自定义派生的 std::exception 类的 'what' 函数返回神秘的废话
- 使用flag、return、exception、goto或break中止过程
- 由于某种原因,我的代码中出现了 [json.exception.type_error.302]。我知道错误意味着什么,但我不知道哪里有故障
- 派生自 std::exception 的类的赋值运算符
- 尝试打印字符串时"Python Exception <class 'gdb.error'> There is no member named _M_dataplus."
- std::exception :使用虚函数和继承与变量
- Writing uin32_t to asio::streambuf
- MFC ODBC SQLConfigDataSource() Unhandled Exception
- 这段 C++ 代码的奇怪行为(std::wcout 和 std::exception)
- VTK 7.1.1: vtkX3DExporter exception
- 无法在"catch(const std::exception &ex)"中捕获 std::invalid_argument
- 捕捉 c++ "Access Violation Writing Exception" ?