首次遇到Segmentation fault(段错误??)
http://baike.sogou.com/baike/fullLemma.jsp?max=&lid=54816111&fromTitle=%E6%AE%B5%E9%94%99%E8%AF%AF
出现了Segmentation fault,基本上的原因是,非法的内存访问。
例如数组的越界,在循环操作时循环变量的控制问题,也有字符串拷贝时长度溢出,指针指向了非法的空间,还有就是申明一个指针,但却没有对其初始化,就直接引用,或者没有开辟内存空间就释放内存,所以要检查申请空间时间是否成功。。。
百度含义:
中文名段错误
常见形式访问系统数据区等
含 义访问的内存超出了系统内存空间
性 质一个48位的寄存器
一旦一个程序发生了 越界访问, cpu就会产生相应的保护,于是segmentation fault就出现
了通过上面的解释,段 错误应该就是访问了不可访问的 内存,这个 内存区要么是不存在的,
要么是受到系统保护的,还有可能是缺少文件或者文件损坏。
段错误的常见形式
听语音在 编程中以下几类做法容易导致段 错误,基本上是错误地使用 指针引起的。
1) 访问 系统数据区,尤其是往系统保护的内存地址写 数据最常见就是给一个 指针以0地址。
2) 内存越界( 数组越界, 变量类型不一致等): 访问到不属于你的内存区域。
解决方法:我们在用C/C++语言写程序的时候,内存管理的绝大部分工作都是需要我们来做的。实际上, 内存管理是一个比较繁琐的工作,无论你多高明,经验多丰富,难免会在此处犯些小 错误,而通常这些错误又是那么的浅显而易于消除。但是手工“除虫”(debug),往往是效率低下且让人厌烦的,本文将就"段错误"这个内存访问 越界的错误谈谈如何快速定位这些"段错误"的语句。
几种典型的段错误
1,int main(void){
char*s ="hello world";
*s ='H';
}
被装载时,系统把“hello world” 连同其它的字符串和const型数据放入到内存的只读区。执行时,一个变量s被设为指向该字符串的位置,当再试图向该位置写时,就会产生段错误。
2,
int*ptr = NULL;
*ptr =1;
因为该代码只创建了一个空指针,并没有指向一个具体空间,当赋值时,产生段错误。
3,
int main(void){
main();
return0;
}
无限递归,这会导致栈溢出,也会产生段错误。

浙公网安备 33010602011771号