为什么程序在本地运行正确,提交后会出现错误?

2025-03-01 17:06:55
推荐回答(1个)
回答1:

通常在VC上没错而在gcc上有错的原因有以下几种:

不规范的语法:C++本身的标准出台比较晚,而VC对于语法的限制并不是非常严格,导致一些本不该出现的语法却能够在VC中正常编译。譬如
int(x):按照C的语法,应该写成(int)x;
for(int i; i < n; i++):C++标准中不建议将变量定义写在for中;
func(int &i):引用是C++语法,不是C的语法;
已定义的宏和函数:在Linux上,有很多宏是系统定义的,因此会出现名字冲突。最简单的处理方法是给冲突的部分换个名字,或者给自己的C++程序增加namespace。
出现运行错误是一种比较棘手的状况,首先必须说明的是,在VC中运行正确并不代表程序是正确的。有很多错误在我们所使用的编写程序的环境中是不会出现的,但却会在其它的环境中出现,而这样的错误往往是最不容易发现的。发生这种情况的原因通常如下:

使用了未初始化的变量:有些变量我们假设它的值为0,但又未对其初始化。这时这些变量的值是随机的,碰巧了或许会是0,但换一个环境就不一定了。
使用了错误的指针:有些指针在使用前并未初始化,但它指向的地址却可以被当前的程序访问,且访问后不会对程序的执行造成影响。但是当环境换了,指针的初始值变了,或者指针所指向的位置变了,就会对程序的执行造成影响,或因为访问了不能访问的地址而发生错误。
使用了错误的数组下标:数组的操作和指针是很象的,当数组下标错误时,同样会对程序造成影响。特别是当数组下标是-1、-2等时,很有可能影响到程序中的其它变量。在编程时必须仔细检查数组下标值的范围,保证其不超过数组的范围。否则,就有可能发生各种奇怪错误。
输出的内容为不显示的乱码:有些程序在输出的时候输出了一些乱码,但这些乱码在终端中并不会被显示。而提交到服务器上之后,会因为这些乱码导致程序的结果和需要的结果不一致。
输出了字符 '\0':这个字符经常用来表示输入的结束,如果输出这个字符,程序的后续输出将会被忽略。