一些常见错误

· · 个人记录

1.编译阶段:
(1)编译时黄字为警告,一般是因为高低版本兼容度不同才会警告
(2)编译错误会指出报错位置,有时候函数名,变量名,STL的类模板名重复可能会导致对变量名报错,比如end,time
(比如加了头文件,然后这个头文件里有同名函数就有可能报错,比如time,这也是比赛不建议用万能头文件的原因之一,
再比如加了#include <map>再定义一个map变量就会导致对map报错)
(3)有时引用头文件的函数时写法非法可能会跳转到对应头文件的源程序里
2.*********.exe     [Error] ld returned 1 exit status
上一个运行中的exe文件还没有结束,导致无法正常编译,更改exe文件
3.悬浮窗显示main函数返回值:
3221225620 (0xC0000094): 除/模0错误,一般发生在整型数据除了0的时候
3221225477 (0xC0000005): 访问越界,一般是读或写了野指针指向的内存,或者萌新常见的错误scanf("%d,a");没有加取地址符&,在洛谷表现为RE错误
3221225725 (0xC00000FD): 堆栈溢出,一般是无穷递归造成的
4.调试阶段:活用printf("*****\n");,觉得有问题的地方就放一放,下面简称调试程序
(1).无法输入数据:可能是前面某个地方无限循环导致无法读到后面的赋值语句,可以在前面放调试语句,如果“*”无限输出就说明确实是无限循环了
(2).无输出:可能没写printf语句或者无限循环
(3).输出不正确:最难找的错误之一,很有可能是变量引用不正确,比如要给j的值结果写成了i,建议用加强版调试程序(可以输出变量值)和自己yy合法好算的数据去手算比对
其他技巧:
1.交到洛谷上的题如果本地能过,但是洛谷上ce,可以用洛谷在线IDE编译一遍找错,比如洛谷不支持gets,time变量名会重复
2.看题解的时候注意1和l(前者为数字1,后者为小写字母l,在洛谷上看起来是一模一样的比如1ll,指的是long long 类型常数1)
一些我见过的逆天错误;
1.scanf()里变量名前面不加&,""里带多余的符号(这个还好,但是半天找不到错属实难蚌)
2.printf()里变量名前加&
3.while(i=1)(本来应该是i==1的)

错误:[Error] declaration of 'a' as multidimensional array must have bounds for all dimensions except the first
翻译:声明“a”作为多维数组必须具有除第一个维度之外的所有维度的边界a作为高阶数组必须有界
起因:double change(double a[][])
解释:参考文献
a[]表示数组引用,而a[][]表示a[]是一个引用,每个引用后面跟着的空间没有声明,无法分配空间,因此错误
解决方法:
double change(double a[][1000])
double change(double (*a)[1000])
(最好的解决方法就是不这么写)