SIGSEGV和SIGBUS

SIGSEGV和SIGBUS都是因为访问内存的时候出现的问题,但是两者不同

SIGSEGV是因为无效的内存访问导致的,一般是指针指向不存在的地址所导致(Invalid memory reference);

SIGBUS是因为总线出错(bus error)。地址一般是先校验地址对齐再校验其他的,校验地址对齐后会放入数据总线,这时有问题就会报SIGBUS的错误。

一般情况下,SIGBUS是因为内存地址没有对齐导致,而SIGSEGV是由于内存地址不合法造成。

通过man 7 signal可以查看所有信号:

SIGSEGV和SIGBUS_第1张图片SIGSEGV和SIGBUS_第2张图片SIGSEGV和SIGBUS_第3张图片

你可能感兴趣的:(SIGSEGV和SIGBUS)