产生段错误是因为访问了不该访问的空间,比如:
1、对空指针(指向地址为NULL的指针)进行操作。
2、对野指针(未被初始化的指针)进行操作。
3、数组越界。
4、用指针对数组进行操作,指针偏移到了数组长度之外。
5、对只读空间进行操作,比如,操作.rodata空间区域,字符串常量(如字符串"hello")便是存储在该区域。
在用c语言写代码过程中,稍不留意就会产生段错误,遇到这种情况如何快速定位到问题地方,这里有一个小技巧。
将出问题的地方打印出来。具体代码如下:
printf("%s %d",_FUNCTION_,_LINE_);
语句中:
_FUNCTION_
是编译器的宏,表示当前函数的名字。
_LINE_
也是编译器的宏,表示当前的行数。