C语言产生SIGBUS的示例代码
时间: 2024-10-16 18:00:21 浏览: 17
在C语言中,SIGBUS通常表示内存访问错误,比如无效地址引用。以下是一个简单的示例,通过指针操作非法内存来模拟产生SIGBUS信号:
```c
#include <stdio.h>
#include <signal.h>
void handler(int signum) {
printf("Received SIGBUS signal.\n");
exit(EXIT_FAILURE); // 程序退出
}
int main(void) {
/* 声明并初始化一个非法的指针 */
void* invalid_ptr = NULL;
/* 注册SIGBUS信号处理器 */
struct sigaction sa;
sa.sa_handler = handler;
sigfillset(&sa.sa_mask); // 设置信号屏蔽集,接收所有信号
sa.sa_flags = SA_RESTART; // 设置重启选项以便于测试
if (sigaction(SIGBUS, &sa, NULL) == -1) {
perror("Failed to register signal handler");
return 1;
}
// 指向无效内存地址可能会触发SIGBUS
*invalid_ptr = 10; // 这将导致一个未定义的行为,通常是SIGBUS
return 0;
}
```
当执行这段代码时,如果尝试写入`invalid_ptr`所指向的内存位置,程序会捕获到SIGBUS信号并调用`handler`函数。请注意,在实际应用中,这种行为是不安全的,应该避免。
阅读全文