在标准 C 中捕获内存访问冲突异常
标准 C 对捕获内存访问冲突异常提供有限的支持,而无需求助于 Microsoft 特定的方法
示例:
考虑代码:
int *ptr; *ptr = 1000;
尝试取消引用未初始化的指针通常会导致访问冲突异常。然而,标准 C 并没有提供专门的机制来处理此类异常。
解决方案:
技巧在于在信号处理程序中抛出自定义异常并捕获它外部。这是实现:
#include <signal.h> void SignalHandler(int signal) { printf("Signal %d", signal); throw "!Access Violation!"; } int main() { signal(SIGSEGV, SignalHandler); try { *(int *) 0 = 0; // Trigger access violation (intentionally bad code) } catch (const char *e) { printf("Exception Caught: %s\n", e); } printf("Execution continues... (Note: Bad coding practices should be avoided)"); }
发生访问冲突时,会抛出自定义异常并在信号处理程序外部捕获。这允许自定义异常处理,而不依赖于 Microsoft 特定的扩展。
以上是如何捕获标准 C 中的内存访问冲突异常?的详细内容。更多信息请关注PHP中文网其他相关文章!