invalid(segment fault)也称为 segment fault,指进程需要访问的内存地址不在它的虚拟地址空间范围内,属于越界访问,内核就会报 segment fault 错误。

造成 segment fault 的原因可能有以下几种:

  • 栈空间不足 - 分配较大的数组作为局部变量时可能发生
  • 堆栈溢出;
  • 内存访问越界,如数组下表错误访问越界;
  • 使用strcpy/strcat/sprintf/strcmp 等字符串操作函数导致的读写越界,应尽量使用strncpy/strncat/snprintf/strncmp 等函数防止读写越界;
  • 非法指针:野指针,错误的指针转换等;
  • 多线程读写的数据未加锁保护,或使用了线程不安全的函数。

作者:算法集市
链接:https://zhuanlan.zhihu.com/p/186268691
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。