未使用合法内存
空指针:你的进程,要去写一个空指针,也就是null,本质上就是0,线性地址空间的0页,cpu 设计时实现了0页故障,从而进入相应的内核处理例程
再一个:写一个内存地址,如果这个地址,物理内存没分配,并且不符合page fault的条件,内核就会报故障
数组越界,操作了不属于你的变量的内存,在某些情况下,会导致数据错误,会死掉
堆栈溢出,申请了超过可用容量的堆栈空间。
内存使用规范类
还有 bus error,就是对齐错误,某种内存使用要求对齐
代码错误
一个指针未初始化,就使用,野指针,也是指向某个不该指向的内存
这是因为,如果代码里,误修改了别的变量,如果那个变量的值,还在可取值正常范围内,可能不会导致错误,
但是,如果修改后的值,在它应该发挥作用的某个代码的地方,检查失败,或用它计算某个值失败,可能就会报错,
linux的C程序自身无程序异常处理机制,只能是系统捕捉到之后,进行处理,把内存状态记录下来