【问题标题】:Equivalent of segfault on Windows/MSVC?相当于 Windows/MSVC 上的段错误?
【发布时间】:2019-10-17 23:20:58
【问题描述】:

在 Linux 上,以下代码:

long* p = (long*)reinterpret_cast<void*>(0x634963963496034) // random memory address
std::cout << *p;

可能会导致读取尚未分配的内存,并且程序将引发 SIGSEGV 信号。否则称为段错误。 (可以通过sigaction(2) 附加操作)。

Windows/MSVC 上是否有等效机制?

以上代码在 Windows 上会做什么?有什么办法可以捕获这种内存访问冲突,并运行用户提供的函数?

【问题讨论】:

标签: c++ visual-c++ c++17 visual-studio-2019


【解决方案1】:

在 Windows 上,当使用 Structured Exception Handling 捕获异常时,宏 GetExceptionCode() 将返回 EXCEPTION_ACCESS_VIOLATION

还可以使用 C++ 异常处理来捕获 SEH 异常,如 here 所述。

【讨论】:

    【解决方案2】:

    我正在寻找的是SetUnhandledExceptionFilter。对于此用例,Windows 上的 SetUnhandledExceptionFilter 等效于 Linux 上的 sigaction

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-12
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      相关资源
      最近更新 更多