问题描述:在Linux下编程有时会出现段错误的提醒,出现这种错误有可能是因为以下几种原因
1.数组越界:如果在初始化或者接收输入时内容超过了定义好的数组元素个数时会出现段错误,Linux的数组越界检查做的不是很好,在编译的时候不会报错,只有运行到越界语句时才会突然中断。这种情况是最常出现的,一不小心就会越界。
2.非法操作内存:这种情况我遇到过一次,是因为我试图通过指针修改data区内的文字常量区的字符串内容。文字常量区,顾名思义即可知道是用于储存常量的,试图修改常量,肯定是会报错的。在内存中,有很多类似的空间是只读的,系统可以往里面存东西但你只能从里面取,如果尝试修改就会出现段错误。还有的系统函数中有些参数是以只读的形式存在,如果试图修改,不论是直接修改还是通过指针修改,都会出现段错误。
3.野指针:野指针是很危险的存在,如果不给指针赋值让其指向一个事先开辟好的安全的内存,这个指针就会得到一个系统分配的随机地址,这个地址如果是系统重要启动文件的内存就不妙了(虽然系统不会让野指针接触到核心内容但是也有可能会指向危险区),这个时候如果再去通过指针操纵指针指向的内存的话会出现段错误,这也算是系统的一个对自身的保护机制。
解决方法:
①先确认有哪些输出语句没有运行到,即,有哪些你预想的输出没有出现在屏幕上。
②然后再在这些没有输出到的代码以前加上一些printf("test\n");类似于这样的一些输出语句来进行错误语句所在行的排查。
③最后定格到的语句中如果出现指针或者数组名,就可以重点检查这些数组指针是否有越界情况,或者指针是否操作了不该操作的内存。
原文:https://www.cnblogs.com/haystack/p/12629525.html