while(--dis>0 ){
if( dis<=n ) array[dis]++;
这样就可以避免导致 段错误 的出现了。
==== update on 2019 02 01 ===========
今天在刷题的时候,再次遇到了段错误。如下图所示:
这一题是1130,求出一个二叉树的中序遍历。【但要求是:需要输出括号】 这里不再介绍。发生段错误的原因是:
因为leftRoot
和rightRoot
值可能为-1,但是array[]
没有-1的下标。当访问array[-1]
于是就产生了段错误。修改一下代码如下:
if(leftRoot != -1) ldr(leftRoot);
cout<<n[root].data;
if(rightRoot !=-1) ldr(rightRoot);
PAT刷题之段错误【updating…】1.什么是段错误?先给出一张图,所谓的段错误就是:Segmentation fault在提交 pat 的一道题时,出现了这个段错误。其实更具体的报错是:Program received signal SIGSEGV,Segmentation fault.我尝试使用不同的测试用例调试时,发现的确存在这个问题,如下:2.如何解决?可能是程序...
PAT中段错误的原因及解决方法
文章目录PAT中段错误的原因及解决方法一.查找方法二.可能原因1.越界访问2.大数组一定要开全局,而不是写在main函数里面。3.sort函数使用错误
一.查找方法
段错误⼀般是由数组越界、堆栈溢出(⽐如,递归调⽤层数太多)等情况引起。
查找的方法也比较简单,首先对可疑的代码注释掉,提交到OJ上试试,如果确实是⾃⼰注释掉的 这段代码发⽣了段错误,那么对应的OJ判题结...
数组越界应该是最常见的段错误了,一般在定义数组的时候大小可能有所偏差,注意题目中的数组范围即可。
在写递归的时候,可能会出现递归调用层数太多导致堆栈溢出,可以将大数组作为全局变量,可以开到很大避免溢出。
变量未初始化
这是我在做题的时候偶然发现的,题目对数组大小限制不大,又没有用到递归,找了半天试着把几个变量初始化后发现错误没了,具体原因不知道,可能是变量随机分配到给定的内存空间外 ?
检查一下数组大小是不是少写了个0(笔者以前就有过…),如果题目要求1000,建议写1010
检查循环遍历的过程中,是否有个别下标越界的情况。
sort函数里cmp比较函数必须要有返回值,比如只有一个return,不要在前面再写个if语句画蛇添足了
如果数组比较大,一般来说>10000就算大,就请在main的外面...
今天调试代码的时候,遇到一个问题就是出现了“段错误”。出现“段错误”的原因就是:访问的内存超出了系统给这个程序所设定的内存空间。知道原因是一个很好的开始,但是并不代表就很容易解决,特别是在代码量较大的情况下,如何才能定位到出错的地方?接下来,我就大概讲一下自己的一点经验,如何在Linux C中用几个命令搞定“段错误”。
1、dmesg
通过dmesg命令可以查看发生段错误的程序名称、引起段错误