当前位置:首页 » 编程软件 » 编译中运行时错误的原因

编译中运行时错误的原因

发布时间: 2022-05-23 13:19:30

A. 程序编译错误不知道是什么原因

不能通编译过的程序实际上还不是合法的程序,因为它不满足C语言对于程序的基本要求。

检查语法错误的第一要义:集中力量检查系统发现的第一个错误,弄清并改正它。

在编译过程中系统发现的错误主要有两类:基本语法错误和上下文关系错误。这些错误都在表面上,可以直接看得见。也是比较容易弄清,比较容易解决的。关键是需要熟悉C语言的语法规定和有关上下文关系的规定,按照这些规定检查程序正文,看看存在什么问题。

编译中系统发现错误都能指出错误的位置。不同系统在这方面的能力有差异,在错误定位的准确性方面有所不同。有的系统只能指明发现错误的行,有的系统还能够指明行内位置。

一般说,系统指明的位置未必是真实错误出现的位置。通常情况是错误出现在前,而系统发现错误在后,因为它检查到实际错误之后的某个地方,才能确认出了问题,因此报出错误信息。要确认第一个错误的原因,应该从系统指明的位置开始,在那里检查,并从那里开始向前检查。

系统的错误信息中都包含一段文字,说明它所认定的错误原因。应该仔细阅读这段文字,通常它提供了有关错误的重要线索。但也应该理解,错误信息未必准确,有时错误确实存在,但系统对错误的解释也可能不对。也就是说,在查找错误时,既要重视系统提供的错误信息,又不应为系统的错误信息所束缚。

发现了问题,要想清楚错误的真正原因,然后再修改。不要蛮干。在这时的最大诱惑就是想赶快改,看看错误会不会消失。但是蛮干的结果常常是原来的错误没有弄好,又搞出了新的错误。

另一个值得注意的地方:程序中的一个语法错误常常导致编译系统产生许多错误信息。如果你改正了程序中一个或几个错误,下面的弄不清楚了,那么就应该重新编译。改正一处常常能消去许多错误信息行。

解决语法错误

常见语法错误:

1)缺少语句、声明、定义结束的分号。

2)某种括号不配对。C语言中括号性质的东西很多,列举如下:
( ), [ ], { }, ' ', " ", /* */
在不同位置的括号不配对可能引起许多不同的错误信息。

3)关键字拼写错误。

较难认定的典型错误:

1)宏定义造成的错误。这种东西不能在源程序文件中直接看到,是在宏替换之后出现的。常见的能引起语法错误的宏定义错误:宏定义中有不配对的括号,宏定义最后加了不该有的分号,……

解决上下文关系错误

1)变量没有定义。产生这个问题的原因除了变量确实没有大意外,还可能是变量的拼写错误,变量的作用域问题(在不能使用某个变量的地方想去用那个变量)。

2)变量重复定义。例如在同一个作用域里用同样名字定义了两个变量,函数的局部变量与参数重名等。

3)函数的重复定义。可能是用同一个名字定义了两个不同的函数。或者是写出的函数原型在类型上与该函数的定义不相符。有时没有原型而直接写函数调用也可能导致这种错误信息,因为编译程序在遇到函数调用而没有看到函数原型或函数定义时,将给函数假定一个默认原型。如果后来见到的函数定义与假定不符,就会报告函数重复定义错误。

4)变量类型与有关运算对运算对象或者函数对参数的要求不符。例如有些运算(如 %)要求整数参数,而你用的是某种浮点数。

5)有些类型之间不能互相转换。例如你定义了一个结构变量,而后要用它给整数赋值。系统容许的转换包括:数值类型之间的转换,整数和指针之间的转换,指针之间的转换。其余转换(无论是隐含的,还是写出强制)都不允许。参见《C语言程序设计》(K&R)197-199页。

如何看待编译警告

当编译程序发现程序中某个地方有疑问,可能有问题时就会给出一个警告信息。警告信息可能意味着程序中隐含的大错误,也可能确实没有问题。对于警告的正确处理方式应该是:尽可能地消除之。对于编译程序给出的每个警告都应该仔细分析,看看是否真的有问题。只有那些确实无问题的警告才能放下不管。

注意:经验表明,警告常常意味着严重的隐含错误。

常见警告:

1)(局部自动)变量没有初始化就使用。如果对局部指针变量出现这种情况,后果不堪设想。对于一般局部自动变量,没有初始化就使用它的值也不会是有意义的。

2)在条件语句或循环语句的条件中写了赋值。大部分情况是误将 == (等于判断)写成 = 了。这是很常见的程序错误,有些编译程序对这种情况提出警告。

B. 编译没问题,但运行时怎么会出现错误呢

可能是指针越界,定义的数组不够大,访问了数组以外的数据。
比如定义了char a[10]; 而你的某个循环代码访问了a[20],或者a[-1]之类的。

C. C语言程序编译后正确,但是运行时总有一个 错误是怎么回事啊,,很急啊,,各位帮帮忙

LINK : fatal error LNK1104: cannot open file "kernel32.lib"

没有指定lib路径!

就是说你的程序 引用到kernel32.lib 库了;然而你 又没有给他指定正确的路径;编译时,编译器找不到kernel32.lib

D. 程序编译时产生错误是因为程序中有语法错误.

正确

运行时错误会在程序运行的过程中出现,比如,在运行的过程中内存被耗尽,引用了不该被引用的地址,除数为0等

逻辑错误是程序运行一切正常,但是没有得到程序作者希望得到的结果,比如,本来应该是加法,却写成了减号,这样程序依然可以正常运行,但是不会按照设想得到和,而是会计算出差。

E. 为什么java文件编译生成CLASS 文件生成成功了运行时还是结果错误

能够编译并运行,说明肯定生成了class文件。
问题可能的原因有两个:
1、你没有找到生成.class文件的那个正确的路径
2、系统设置问题,文件没有显示扩展名

F. 用命令行编译Java时可以,运行时就错,怎么回事

编译通过了没有? javac ParamTest.java
编译通过了,就自动生成一个ParamTest.class文件。
java ParamTest 报这种错,有两个原因:
1.类名写错了。
2.java环境没有配置好。
如果是类的内容写的有错误,它会报具体的错误的。
希望对你有帮助。

G. pb程序调试不报错 但是编译完后运行可执行文件出错 这是什么原因呢

可能的原因:
如果程序运行过程中动态使用了对象,那么在编译时就必须把该对象所在pbl编译为pbd或dll,或者在pbr文件里列出动态使用的对象,否则编译后的程序里是不含这个对象的,所以会报错

H. C语言程序,编译没有错误,执行时出错。问题在哪

#include<stdio.h>
intmax(inta,intb);
intmain(void)
{
inta,b,c;
scanf("%d%d",&a,&b);
c=max(a,b);
printf("maxis%d ",c);
return0;
}
intmax(inta,intb)
{
returna>b?a:b;
}

max函数未定义

I. 程序编译时没错运行时有错是怎么回事

程序编译没有错误,只是表明语法检查没有问题了,但是程序的逻辑是否合理、运行是否正确,则不一定。很多情况都会导致这样的问题,比方说数组越界,访问非法指针等,你没有给出源代码,也没有提供相关错误信息,所以到底是什么原因,在这里也不好确定。如果程序不长的话,建议对程序进行调试,监测程序的运行状态,这样容易找出问题。

J. 编写的程序运行时错误通常是由什么原因导致的

和设置一般没什么关系,code::blocks也是调用标准的编译器进行编译的,提升你错了你最好仔细看看,另外,即使编译正确,运行也不一定能成功,因为编译器只能检查一部分错误,而且主要是语法错误。
关于你说的int这个问题,请放代码
的应用。(要求会正确排序) 早期的信息传播工具:烽

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:705
制作脚本网站 发布:2025-10-20 08:17:34 浏览:968
python中的init方法 发布:2025-10-20 08:17:33 浏览:676
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:828
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:737
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1076
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:308
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:188
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:875
python股票数据获取 发布:2025-10-20 07:39:44 浏览:829