无法使用 C++ catch(..) 捕获访问冲突异常
Cannot catch access violation exception by use of C++ catch(...)
在下面的代码中,我想通过使用 c++catch (...)来捕获异步和同步异常Microsoft 有关异常处理模型的页面说明。
此外,我将"异常处理模型"设置为Yes with SEH Exceptions (/EHa)
值。
我分别使用以下状态测试了代码:
-
当我在未分配的
char*
(char *c;
)中复制字符串时,我可以在catch (...)
部分中捕获其异常。(但是我知道这是一种未定义的行为! -
但是当我复制字符数组中的字符串(字符串大于数组大小)时,我无法捕获任何异常!
-
在第二种状态下,调试时出现访问冲突错误。 但是为什么不能像第一个状态那样捕获它的异常?
-
我尝试了另一种解决方案,如以下所述:
捕获访问冲突异常?
但问题仍然存在。
这是我的代码(我在未分配的char*
和字符数组上测试了strcpy()
):
int main()
{
char c[3] = { 0 }; // Cannot catch any exception
//char *c; // Can catch exception
try
{
strcpy(c, "abcdefghijklmnopqrstuvwxyz1234567890");
}
catch (...)
{
cout << "Undefined behavior!" << endl;
}
return 0;
}
访问冲突不需要引发异常。
你在这里拥有的是未定义的行为。根据结构的文件
如果目标数组不够大,则未定义该行为。如果字符串重叠,则行为未定义。
相关文章:
- 写入访问冲突异常
- 在C++中删除双向链表的头节点后出现访问冲突异常
- Visual Studio图形调试器引发读取访问冲突异常
- 尝试将 std::cerr 重定向到文件时出现访问冲突异常
- 媒体基础:读取示例 - 访问冲突异常
- 链表的访问冲突异常
- 进入函数之前的访问冲突异常
- 删除函数 c++ 的读取访问冲突异常
- 无法使用 C++ catch(..) 捕获访问冲突异常
- 在Visual Studio Community中使用glfw3 glew和opengl获取访问冲突异常
- 访问动态 2D 字符数组时引发访问冲突异常
- 从静态库使用 Boost Asio 时访问冲突异常
- 为什么访问冲突异常不能被 捕获.NET4.0.
- glGenBuffers 访问冲突异常
- unsigned char*导致访问冲突异常
- 注入DLL的函数中出现访问冲突异常(5)
- 删除二叉搜索树中的节点中的 Visual Studio 中的访问冲突异常
- 提升 Asio tcp::接受者访问冲突异常
- 在 .Net 应用程序中调用 C++ DLL 时出现系统访问冲突异常
- 为什么此代码会引发访问冲突异常