代码一分钟,Debug半小时 之 牛客网在线编程防坑集锦

1. 刚开始做题极容易忽略的一个问题,对极端条件的判定,如果传进来的是空值,如空数组,空指针等如何处理,一般报错栈溢出,段错误除了非法访问,数组越界等,很可能是没有对空值这种极端情况进行处理。

2.测试数据可能有很多组,但是每组之间根本不会有EOF结尾,全部都是连在一起的,导致本地都对,在线测试怎么都错!!所以一般读取是否结束要根据它的数量来判定,最外层才是采用EOF判定。

3.内存超限,可能原因是忘了给函数返回值,导致测试端检查该值时发生非法访问等相关原因。

4.返回变量没有赋初值,导致程序逻辑本身正确,中途正解为没有对返回变量赋任何值,逻辑上是返回空值,但没有初始化导致错误发生,返回随机值。

5.在函数内使用static变量,而且在程序的整个生存周期内没有对其置位清零产生意想不到的结果,解决办法:可以放在类public中做一般变量来解决。

6.题述只说了参数是整数,要注意处理负数时的情况。如3的整数次方,可能是 $3^{-2}$

7.含有链表的题目,记得标记尾部节点

8.链表中,LinkNode *tmp, *x;  tmp = node.next;  tmp = x; 与 node.next = x 代表的意思是完全不同的,第一种表达方式 是tmp先指向node.next,再指向新的链表节点x(而不是让x链接到node的后面,如果要实现这个功能,在此方法下需要使用二级指针),而第二种是让x链接到node的后面。

9.包含数字处理的,注意溢出,如int型范围在-2147483648-2147483647

 

中途发现还有其他问题再来补充,不得不说牛客网的OJ是真的操蛋,让我们专注逻辑不好么,还要操心其他乱七八糟的。