pax*_*blo 46
在我使用过的大多数架构中,区别在于:
bk1*_*k1e 21
SIGBUS
如果你mmap()
是一个文件并且尝试访问超出文件末尾的映射缓冲区的一部分,以及空间不足等错误条件,也会引发它.如果使用sigaction()
和设置注册信号处理程序SA_SIGINFO
,则可能让程序检查故障内存地址并仅处理内存映射文件错误.
将您的问题(可能是错误的)解释为“我间歇性地收到 SIGSEGV 或 SIGBUS,为什么它不一致?”,值得注意的是,C 或 C++ 标准并不能保证使用指针做一些狡猾的事情会导致段错误;这只是“未定义的行为”,作为一名教授,我曾经说过,这意味着它可能会导致鳄鱼从地板上出现并吃掉你。
因此,您的情况可能是有两个错误,第一个发生有时会导致 SIGSEGV,第二个(如果段错误没有发生并且程序仍在运行)会导致 SIGBUS。
我建议您使用调试器逐步执行,并留意鳄鱼。