C语言调试常见错误
c语言调试中出现的典型问题及解决方法
c语言调试中出现的典型问题及解决方法
在C语言调试过程中,常见的典型问题包括:
1. 程序运行崩溃或卡死:
- 检查内存越界访问,确保不会越界读写数组或指针;
- 验证动态内存分配的正确性;
- 检查函数调用的逻辑错误,如无限递归调用或死循环等;
- 使用断点调试,逐步跟踪程序执行过程,找到导致崩溃的
代码行。
2. 输出结果与预期不符:
- 检查变量的初始化和赋值是否正确;
- 使用printf语句输出变量的值,以便观察中间变量和计算
结果;
- 对比程序的期望输出和实际输出,找到差异。
3. 逻辑错误:
- 检查条件判断语句是否正确,确保程序根据预期逻辑执行; - 检查循环语句的终止条件,避免无限循环;
- 使用printf语句输出中间变量的值,观察程序执行过程中
的变化。
4. 内存泄漏:
- 检查动态内存的申请和释放是否配对使用;
- 使用内存检测工具,如Valgrind,检测内存泄漏和非法内
存访问;
- 注意释放动态内存的时机,在不再使用该内存时及时释放。
5. 多线程问题:
- 确保线程同步正确,避免数据竞争和死锁现象;
- 使用线程调试工具,如GDB,跟踪线程的执行和状态变化; - 检查线程之间的通信和同步机制是否正确使用。
总体而言,解决问题的方法主要包括:仔细检查代码逻辑、使用断点调试、输出中间结果、使用调试工具等。对于复杂的问题,可以采用分而治之的思路,逐步排查问题所在。此外,阅读官方文档和相关参考资料也是解决问题的好方法。
C语言常见错误与调试方法
C语言常见错误与调试方法
在学习和使用C语言的过程中,出现错误是很常见的。这些错误可
能会导致程序无法正常运行或产生不符合预期的结果。为了提高代码
的质量和效率,我们需要了解常见的C语言错误,并学会相应的调试
方法。
1. 语法错误
语法错误是最常见的错误类型之一。它们通常是由于拼写错误、标
点符号的错误、缺少分号以及错误的语法结构等问题导致的。为了避
免语法错误,我们应该养成良好的编程习惯,例如检查拼写和标点符号、使用代码缩进和注释来提高代码的可读性。
当遇到语法错误时,我们应该仔细检查所在代码行及其前后的语句,查找可能存在的拼写错误或语法结构错误。有时,观察编译器给出的
错误提示信息也是解决语法错误的关键。
2. 逻辑错误
逻辑错误是指程序运行时产生错误结果、逻辑混乱或无法按照预期
执行的情况。这些错误通常是由于程序员的思考不清晰或对问题理解
不准确导致的。
要避免逻辑错误,我们需要仔细分析和推理代码的逻辑,确保我们
的代码能够完整地涵盖目标问题。此外,我们还可以使用调试工具来
帮助捕捉逻辑错误,例如使用调试器逐步跟踪代码的执行路径、使用
断点来观察变量值等。
当遇到逻辑错误时,我们可以尝试使用输出语句在关键位置输出变
量的值,以便观察程序的执行情况。另外,调试工具提供了代码的逐
行执行功能,我们可以逐步检查代码并观察变量的值,从而找出逻辑
错误的根源。
3. 数组越界错误
数组越界错误是指在访问数组元素时超出了数组的范围。这样的错
误可能会导致程序崩溃或者产生不可预测的结果。
为了避免数组越界错误,我们需要确保在访问数组元素之前检查数
c语言程序调试中错误或警告提示的中文对照概要
C语言错误提示
Ambiguous operators need parentheses -------不明确的运算需要用括号括起
Ambiguous symbol ''xxx'' ---------------- 不明确的符号
Argument list syntax error ---------------- 参数表语法错误
Array bounds missing ------------------ 扔掉数组界限符
Array size toolarge ----------------- 数组尺寸太大 Bad character in paramenters ------ ------------ 参数中有不合适的字符
Bad file name format in include directive ------------ 包含命令中文件名格式不正确
Bad ifdef directive synatax ------------------ 编译预办理 ifdef 有语法错
Bad undef directive syntax ------------------- 编译预办理 undef 有语法错
Bit field too large ---------------- 位字段太长
Call of non-function ----------------- 调用不决义的函数
Call to function with no prototype ----------- 调用函
数时没有函数的说明
C语言常见错误分析和程序调试
C语言程序调试
警告类错误
‘XXX‟declare but never used 变量XXX已定义但从未 用过。 ‘XXX‟is assigned a value which is never used 变量 XXX已赋值但从未用过。 Code has no effect 程序中含有没有实际作用的代码。 Non-portable pointer conversion 不适当的指针转换, 可能是在应该使用指针的地方用了一个非0的数值。 Possible use of „XXX‟before definition 表达式中使用 了未赋值的变量 Redeclaration of „main‟ 一个程序文件中主函数main 不止一个。 Suspicious pointer conversion 可疑的指针转换。通常 是使用了基本类型不匹配的指针。 Unreachable code 程序含有不能执行到的代码。
C语言程序调试
二、在人工检查无误后,再上机调试。
通过上机发现错误称为动态检查。在编译时会给出 语法错误的信息,调试时可以根据提示信息具体找出 程序中出错之处并改正。应当注意的是有时提示出错 的地方并不是真正出错的位置,如果在提示出错的行 找不到错误的话应当到上一行再找。有时提示出错的 类型并非绝对准确,由于出错的情况繁多且各种错误 互有关联,因此要善于分析,找出真正的错误,而不 要只从字面意义上找出错信息,钻牛角尖。 如果系统提示的出错信息很多,应当从上到下逐 一改正。有时显示出一大片出错信息往往使人感到问 题严重,无从下手。其实可能只有一二个错误。例如, 对使用的变量未定义,编译时就会对所有含该变量的 语句发出出错信息。这时只要加上一个变量定义,就 所有错误都消除了。
c语言调试中出现的典型问题及解决方法
《C语言调试中出现的典型问题及解决方法》
在软件开发过程中,调试是一个至关重要的环节。C语言作为一种广
泛应用的编程语言,在调试过程中也会出现一些典型的问题。本文将
针对这些问题,结合我的个人经验,为您详细解析并提供解决方法。
1. 编译错误
当在编译C语言程序时出现错误,最常见的原因是语法错误或拼写错误。这种错误通常会在编译器进行静态检查时被捕捉出来。解决方法
是仔细检查代码,确保语法正确,并注意拼写错误。
2. 运行时错误
在程序运行过程中,有时会出现一些未预料到的错误,比如数组越界、空指针引用、内存泄漏等。这些错误可能会导致程序崩溃或不符合预
期的行为。解决方法是通过调试工具,比如gdb,逐步执行程序,定
位错误所在,并进行修复。
3. 内存泄漏
内存泄漏是指程序中分配的内存未能在不再需要时被释放,导致系统
可用内存减少。这种问题在大型程序或长时间运行的程序中尤为常见。解决方法是通过内存检测工具,比如Valgrind,对程序进行检测,找
出内存泄漏的位置,并及时释放内存。
4. 死锁
在多线程程序中,可能会出现死锁的情况,即各个线程因相互等待对
方释放资源而无法继续执行。这种情况需要通过仔细分析程序各个线
程的资源竞争情况,并加入适当的同步机制来避免死锁的发生。
5. 性能问题
在一些复杂的程序中,可能会出现性能问题,比如运行速度慢或者占
用过多系统资源。解决方法是通过性能分析工具,比如gprof,对程
序进行性能分析,找出瓶颈所在,并进行优化。
总结回顾:
本文深入探讨了C语言调试过程中常见的问题及解决方法,通过对编
译错误、运行时错误、内存泄漏、死锁和性能问题的分析,帮助读者
C语言常见错误原因分析及防范
C语言常见错误原因分析及防范
C语言作为一种通用的程序设计语言,常常被初学者使用。然而,由
于C语言的一些特性和语法规则相对复杂,容易导致编程错误。在本文中,我们将分析一些常见的C语言错误,并提供一些防范方法。
1.内存越界访问:
内存越界访问是C语言中最常见的错误之一,该错误发生在程序试图
访问超出分配给它的内存块的边界之外的内存。内存越界访问可能导致程
序崩溃或者未定义的行为。防范方法包括:
-使用合适的数据结构来管理内存,例如使用数组或者动态分配的内存。
-注意指针的使用,确保指针指向有效的内存块。
- 使用函数库中提供的函数来处理字符串和数组,例如使用
`strncpy(`而不是`strcpy(`来复制字符串,防止缓冲区溢出。
2.未初始化的变量:
C语言中的变量如果没有被初始化,其值是未定义的。使用未初始化
的变量可能导致程序产生随机的结果。防范方法包括:
-在使用变量之前,确保先给变量赋上合适的初值。
- 尽量避免在声明变量时使用省略号,例如`int sum;`而不是`int sum = 0;`。
3.类型不匹配:
在C语言中,类型不匹配可能导致未定义的行为或者数据损坏。类型不匹配的错误可能发生在赋值、函数调用或者表达式求值时。防范方法包括:
-在赋值操作之前,确保被赋值的变量和赋值的值类型一致。
-在函数调用时,函数的参数类型和参数的值类型应该匹配。
-在表达式求值时,确保操作数的类型一致,或者通过强制类型转换来将其转换为合适的类型。
4.非法的指针操作:
C语言中指针的操作非常灵活,但也容易引起错误。非法的指针操作可能导致程序崩溃或者产生未定义的行为。防范方法包括:
C语言技术使用中常见问题解决方案精选
C语言技术使用中常见问题解决方案精选
在学习和应用C语言技术的过程中,我们常常会遇到一些问题,这些问题可能是语法错误、逻辑错误、编译错误等等。虽然这些问题看似琐碎,但解决它们是我们提高编程能力的重要一步。本文将为大家精选一些C语言技术使用中常见问题的解决方案,希望能够帮助读者更好地应对这些问题。
一、语法错误
语法错误是编程过程中最常见的问题之一。这些错误常常是由于拼写错误、缺少分号、括号不匹配等造成的。在遇到这些问题时,我们可以通过仔细检查代码,查找可能的错误位置,逐个排查并修正错误。此外,我们还可以使用一些代码编辑器或集成开发环境(IDE)来帮助我们发现并修复这些语法错误。
二、逻辑错误
逻辑错误是指程序在运行过程中出现的错误,这些错误可能导致程序无法按照我们预期的方式执行。要解决逻辑错误,我们首先需要仔细阅读程序代码,理解程序的逻辑结构。其次,我们可以使用调试工具来帮助我们定位问题所在。调试工具可以让我们逐行执行程序,观察变量的值以及程序的执行流程,从而找出程序中的逻辑错误。最后,我们还可以通过添加一些输出语句来帮助我们理解程序的执行过程,从而更好地定位问题。
三、编译错误
编译错误是指在编译程序时出现的错误,这些错误通常是由于语法错误或链接错误导致的。要解决编译错误,我们首先需要仔细阅读编译器的错误提示信息,了解错误的具体原因。其次,我们可以使用一些调试工具或IDE来帮助我们定位问题所在。这些工具可以提供更详细的错误信息,帮助我们更好地理解错误的原因。最后,我们还可以通过注释掉部分代码,逐步编译程序,找出导致编译错误的具体代码片段。
C语言程序常见错误与调试方法
C Programming
3、警告 • “警告”是指被编译程序怀疑有错,但不确定, 有时可强行编译通过。例如:主函数没有返回值 时没有加void声明、double型数据被转换为float 型数据等。 • 这些警告中,有些会导致错误,有些则可以编译 通过。
C Programming
(三)C语言程序调试方法
• 编译诊断的语法错误分为3类:致命错误、错误和 警告。
C Programming
1、致命错误 • “致命错误”大多数是编译程序内部发生错误。 • 发生这类错误时,编译被迫终止,只能重新启动 编译程序。幸运的是,这类错误很少发生,但是 为了安全,编译前最好先保存程序。
C Programming
2、错误 • “错误”通常是在编译时,语法不当所引起的, 例如括号不匹配、变量为声明等。 • 产生这类错误时,编译程序会出现报错提示,根 据提示对源程序进行修改即可。这类错误是出现 最频繁的。
(三)C语言程序调试方法 2)如果实在找不到错误,可以采用“分段检查”的 方法。逐段往下检查,直到找到在某一段中数据 不对为止。这时就已经把错误局限在这一段中了。 不断减小“查错区”,就能发现错误所在。 3)如果在程序中没有发现问题,就要检查流程图有 无错误,即算法有无问题。有则改正之,接着修 改程序。
C语言程序常见错误与调试方法
(一)C语言程序常见错误 • 程序设计很少能够没有错误的一次完成,在编程 的过程中由于种种原因,总会出现这样或那样的 错误,这些程序的错误也就是常说的“Bug”, 而检测并修正这些错误就是“Debug”(调试)。 • 程序错误可分为三类:语法错误、运行错误和逻 辑错误。
C语言编程的常见错误
C语言编程的常见错误
C语言是一种广泛使用的编程语言,但是由于其语法相对复杂和易
错的特点,导致了很多编程错误的出现。本文将介绍C语言编程中常
见的错误以及如何避免这些错误,以帮助编程者提高代码质量和效率。
1. 变量未初始化
变量未初始化是C语言中常见的错误之一。在声明变量后,如果没
有对其进行赋值操作,变量的初始值将是未定义的,可能会导致程序
运行时出现奇怪的结果。为了避免这个错误,我们应该在声明变量的
同时为其赋予一个合适的初值。例如:
int num = 0; // 初始化变量num为0
2. 数组越界访问
在C语言中,数组越界访问是一个常见的编程错误。当我们试图访
问数组中超出其大小范围的元素时,会导致程序崩溃或者产生不可预
测的结果。为了避免这个错误,我们应该在访问数组元素之前确保下
标值在合法的范围内。例如:
int arr[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]); // 合法的范围是0~4,避免越界访问
}
3. 无限循环
无限循环是编程中常见的错误之一。当我们在循环中忘记更新循环条件,或者设置了错误的循环条件时,循环将无法正常终止,导致程序陷入死循环。为了避免这个错误,我们应该在循环中确保循环条件能够最终为假,以正常退出循环。例如:
int count = 0;
while (count < 10) {
printf("%d ", count);
count++; // 确保循环条件最终为假,避免无限循环
C语言常见错误分析汇总
C语言常见错误分析汇总
C语言是一种广泛应用的编程语言,但由于语法相对复杂,初学者容易犯一些常见的错误。下面将汇总一些常见的C语言错误,以便帮助初学者更好地理解和避免这些问题。
1.语法错误:C语言对语法要求非常严格,一些错误的语法表达会导致编译错误。例如,缺少分号、括号不成对等。
2.逻辑错误:这类错误通常是代码逻辑错误,导致程序运行结果与预期不同。例如,条件判断错误、循环错误等。
3.变量未初始化:在使用变量之前,未对其进行初始化操作会导致不确定的结果。这种错误可能会导致程序崩溃或产生意外结果。
4.数组越界:在C语言中,数组的下标从0开始,如果使用了超出数组范围的下标,会导致越界错误。这可能会修改其他内存空间的值,导致程序错误。
5.内存泄漏:动态分配内存后没有正确释放会导致内存泄漏。这在长时间运行的程序中可能导致内存耗尽。
6.不匹配的数据类型:数据类型不匹配会导致计算错误或编译错误。例如,对整型变量使用浮点数运算符,或使用未定义的数据类型。
7.空指针解引用:解引用空指针会导致程序崩溃。在使用指针之前,一定要确保其指向有效的内存空间。
8.死循环:循环条件错误或循环体内没有正确的终止条件会导致死循环,程序无法正常退出。
9.多次释放同一块内存:多次释放同一块动态分配的内存会导致程序错误或崩溃。
10.缺少返回语句:在函数中缺少返回语句或返回语句在多个分支中没有覆盖所有情况,会导致未定义的行为。
11.使用未定义的变量:在使用变量之前,必须先定义该变量。否则会导致编译错误。
12.逻辑短路错误:逻辑运算符中,逻辑短路原则是如果已经可以确定逻辑表达式的结果,后续的表达式不会被执行。如果依赖于后续表达式的计算结果,会导致逻辑错误。
C语言运行程序错误及解决方法集锦
C语言运行程序错误及解决方法集锦
一、基础知识和数据类型、表达式
1、{},[],(),‘’,“”不配对。解决这个问题最好的方法就是每当写这些符号的时候就先写成一对,然后再在中间加内容。
2、忘记在语句的末尾加分号,或在预处理命令后多加分号。记住:每一个语句的后边都要加分号,而预处理命令并不是语句,所以不加分号,他们必须每行一条,不能把多个命令写在一行。
3、混淆/和\;注释对应的符号是/* */,而转义字符是以\开头,除号是/。
4、printf()和scanf()的参数设置有误,主要表现在以下几方面:
(1)类型不匹配的问题。(例如:有float a=3.5,但输出的时候printf(“a=%d”,a);则屏幕上会显示出a=0.00000或者提示其它运行错误)。基本原则是:float对应%f, int对应%d, char 对应%c。
(2)个数不匹配。无论是哪个函数,都可以有n个参数,第一个永远是“”括起来的内容,表示输出格式。剩下的n-1个是输出的变量或者输入的变量的地址。需要注意的是,如果后边有n-1个参数,那么前边一定对应n-1个%f一类的格式说明符。
(3)scanf()中变量前忘了加&。记住:scanf()中变量前要有&(但后边学到的字符数组名和指针前不用加)
5、定义标识符的时候经常出现使用非法字符的情况,例如:标识符中不能用空格,也就是说不能有这样的定义:int radium of circle;一般情况下可用下划线将三个单词连接在一起。
6、在使用变量前未定义,或未初始化。例如:若下边的sum未定义,则在编译时会提示相应的错误信息,而若未初始化为0,则求和的结果一定是错误的。
C语言调试常见错误及修改方法(附习题)
1.调试C程序时常见的错误类型分析
一般情况下,错误主要分为两大类:
一、语法错误。对于这种错误,用编译器很容易解决。所以,改错题的第一步是先编译,
解决这类语法错误。下面总结了二级C语言上机改错题中常见的语法错误:
(1)丢失分号,或分号误写成逗号。
(2)关键字拼写错误,如本来小写变成大写。
(3)语句格式错误,例如for语句中多写或者少写分号。
(4)表达式声明错误,例如:少了()
(5)函数类型说明错误。与main()函数中不一致。
(6)函数形参类型声明错误。例如:少*等。
(7)运算符书写错误,例如:/写成了\。
二、逻辑错误,或者叫语义错误,这和实现程序功能紧密相关,一般不能用编译器发现。
对于逻辑错误可以按这样的步骤进行查找。
(1)先读试题,看清题目的功能要求。
(2)通读程序,看懂程序中算法的实现方法。
(3)细看程序,发现常见错误点。
2.改错题的改错方式总结,当然这些总结只能对大部分改错行有效。
1、若错误行是函数首部,可分为以下几种情况:
A、该行最后若有分号则删除,中间若有分号则改成逗号
B、形参类型不一致的问题,特别是指针类型,若后面用到某形参时有指针运算则该形参必为指针类型;若形参是二维数组或指向m个元素的指针变量,则第二维的长度必须与main 中对应数组的第二维长度相同
C、函数类型不一致的问题,若函数中没有return语句则函数类型为void,若有return语句则函数的类型必须与return后变量的类型一致。
2、若错误行是if或while语句,则首先看有没有用小括号将整个表达式括起,若没有则加上小括号。
C语言中的常见错误及解决方法
C语言中的常见错误及解决方法C语言作为一种广泛应用于软件开发领域的编程语言,常常出现一
些让初学者或经验不足的程序员困惑的错误。本文将介绍C语言中常
见的错误,并提供解决这些错误的方法。
一、语法错误
语法错误是编程过程中最常见的错误之一。它们通常由于代码中存
在语法错误或书写错误而导致。以下是一些常见的语法错误和解决方法:
1.1 缺少分号
分号是C语言中语句结束的标志,如果未在语句末尾添加分号,编
译器会报错。解决方法是仔细检查代码,确保每个语句的末尾都有分号。
1.2 括号不匹配
在C语言中,括号必须成对出现。如果括号未正确匹配,编译器会
报错。解决方法是仔细检查代码,确保每个左括号都有对应的右括号。
1.3 大小写错误
C语言对大小写敏感,因此函数和变量的命名必须与其声明中的大
小写完全匹配。解决方法是检查代码中的命名,并确保其大小写匹配。
1.4 未定义的变量
使用未定义的变量会导致编译器报错。解决方法是确保在使用变量之前先进行声明或定义。
二、逻辑错误
逻辑错误在语法上没有问题,但程序的逻辑流程存在缺陷,导致程序运行不符合预期。以下是一些常见的逻辑错误和解决方法:
2.1 数组越界访问
在C语言中,数组的索引从0开始。如果超出数组的索引范围进行访问,会导致程序崩溃或产生意想不到的结果。解决方法是检查数组索引,并确保它们在合法范围内。
2.2 逻辑运算错误
逻辑运算符(如&&、||和!)在C语言中用于组合表达式。但是,如果这些运算符的使用不当,可能会导致逻辑错误。解决方法是仔细检查逻辑运算表达式,并确保其符合预期的逻辑规则。
C语言中的常见错误及解决方法
C语言中的常见错误及解决方法
C语言是一门广泛应用于计算机编程领域的高级编程语言。它的简洁性和高效性使得它成为了许多程序员的首选。然而,即使对于有经验的程序员来说,C语言中也存在一些常见的错误。本文将探讨一些常见的C语言错误,并提供相应的解决方法。
1. 内存泄漏
内存泄漏是C语言中最常见的错误之一。它发生在程序分配了内存空间,但在使用完毕后未正确释放。这导致内存空间被占用,最终可能导致程序崩溃或者系统变慢。
解决方法:
- 使用malloc函数分配内存后,一定要使用free函数释放内存。
- 为了避免出现遗漏的情况,可以在每次使用完内存后立即释放。
2. 数组越界
在C语言中,数组越界是一个常见的错误。当程序试图访问数组中超出其边界的元素时,会导致未定义的行为,可能引发程序崩溃或产生错误的结果。
解决方法:
- 在使用数组时,一定要确保索引值不会超出数组的边界。
- 可以使用循环结构和条件语句来检查数组索引的合法性。
3. 未初始化变量
在C语言中,未初始化变量的使用是一个常见的错误。当程序试图使用未初始化的变量时,它的值是不确定的,可能导致程序产生错误的结果。
解决方法:
- 在使用变量之前,一定要确保它已经被正确地初始化。
- 可以使用赋值语句或者初始化函数来初始化变量。
4. 类型不匹配
类型不匹配是C语言中另一个常见的错误。它发生在程序试图将一个类型的值赋给另一个类型的变量,或者将不同类型的变量进行运算。
解决方法:
- 在进行类型转换时,可以使用强制类型转换运算符来确保类型匹配。
- 在进行运算时,要确保参与运算的变量类型一致。
C语言常见错误及解决方法
C语言常见错误及解决方法
C语言是一门非常重要的编程语言,但是在学习和使用过程中,常常
会遇到一些错误。这些错误可能会导致程序无法正常运行或产生错误的结果。在这篇文章中,我将介绍一些C语言常见错误及解决方法,希望对你
在学习和使用C语言时能有所帮助。
1.语法错误
语法错误是最常见的错误之一,它通常是由错别字、缺少分号、括号
不匹配等导致的。解决这类错误的方法是仔细检查代码,并根据编译器的
错误提示进行修改。
2.类型错误
类型错误指的是错误地使用了不匹配的数据类型。比如将整数型赋值
给浮点型变量,或者将字符型变量赋值给整型变量等。解决这类错误的方
法是确保变量的数据类型匹配,并进行必要的类型转换。
3.空指针错误
空指针错误是指使用了未初始化或已被释放的指针变量。当你尝试使
用这些指针变量时,会导致程序崩溃或产生不可预测的结果。解决这类错
误的方法是在使用指针之前,为其分配内存空间并进行初始化。
4.内存泄漏
内存泄漏是指在程序运行过程中,分配的内存空间没有被正确释放。
这会导致内存占用越来越多,最终导致程序崩溃或系统资源不足。解决这
类错误的方法是在不再需要使用一些内存空间时,使用free(函数释放它。
5.数组越界
数组越界是指访问数组时超过了其允许的范围。这会导致程序崩溃或产生不可预测的结果。解决这类错误的方法是确保数组的索引在有效范围内,并正确使用循环等控制结构。
6.逻辑错误
逻辑错误是指程序的逻辑顺序有误,导致程序无法达到预期的目标。解决这类错误的方法是仔细分析程序的逻辑流程,并进行必要的修改和调试。
7.死循环
死循环是指程序进入一个无法正常退出的循环。这可能是由于循环条件错误或循环体内没有设置循环终止条件所导致的。解决这类错误的方法是确保循环条件正确,同时在必要的情况下添加循环终止条件。
C语言编程常见错误和程序调试
15.1 C语言编程常见错误
如果提示工具连接错误,则表示KEIL安装程序有问题,重新卸载,并全部删除后重新再进行安装后即可。
15.2 KEILC程序调试常见错误
pling :C:\8051\MANN.C
Error:318:can’t open file ‘beep.h’
说明在编译C:\8051\MANN.C 程序过程中由于main.c 用了指令#i nclude “beep.h”,但却找不到所致解决方法编写一个beep.h 的包含档并存入到c:\8051 的工作目录中
pling:C:\8051\LED.C
Error 237:’LedOn’:function already has a body
说明LedOn( )函数名称重复定义即有两个以上一样的函数名称
解决方法修正其中的一个函数名称使得函数名称都是独立的
3.WARNING 206:’DelayX1ms’: missing function-prototype
C:\8051\INPUT.C
Error 267 :’DelayX1ms ‘:requires ANSI-style prototype C:\8051\INPUT.C
说明程序中有调用DelayX1ms 函数但该函数没定义即未编写程序内容或函数已定义但未作声明
解决方法编写DelayX1ms 的内容编写完后也要作声明或作外部声明可在delay.h 的包含档声明成外部以便其它函数调用
4.***WARNING 1:UNRESOLVED EXTERNAL SYMBOL
SYMBOL:MUSIC3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言调试常见错误
一、第一类错误分析
1在使用变量前未定义。
例如:
main()
{a=1;
b=2;
printf(″%d\n″, a+b);
}
2语句后面漏写分号或不该加分号的地方加了分号。
C语言规定,语句必须以分号结束,分号是C语句不可缺少的一部分,这也是和其它高级语言不同的一点。初学者往往容易忽略这个分号。
如:
x=1
y=2;
又如在复合语句中漏写最后一个语句的分号:
{t=x;
x=y;
y=t
}
3不该有空格的地方加了空格
例如,在用/*...*/对C程序中的任何部分作注释时,/与*之间都不应当有空格。
又如,在关系运算符<=,>=,==和!=中,两个符号之间也不允许有空格。
4定义或引用数组的方式不对。
C语言规定,在对数组进行定义或对数组元素进行引用时必须要用方括号(对二维数组或多维数组的每一维数据都必须分别用方括号括起来),例如以下写法都将造成编译时出错:
int a(10); int b[5,4];
printf(″%d\n″,
b[1+2,2]);
5混淆字符和字符串
C语言中的字符常量是由一对单引号括起来的单个字符;而字符串常量是用一对双引号括起来的字符序列。字符常量存放在字符型变量中,而字符串常量只能存放在字符型数组中。例如,
假设已说明num是字符型变量,则以下赋值语句是非法的:
num=″1″;
6在引用数组元素或指针变量之前没对其赋初值。
例如:
main() main()
{int a[6],b; {int *ptr, i=1;
b=a[5]; *ptr=i
┇ ┇
}}
以上两个程序段在编译时均会出现警告信息。
7混淆数组名与指针变量
在C语言中,数组名代表数组的首地址,它的值是一个常量,不能被修改。例如,在以下程序段中,用a++是不合法的。
main()
{int i, a[10];
for (i=0;i<10;i++)
scanf(″%d″, a++);
┇
}
8混淆不同类型的指针。
若有以下语句:
int *p1, a=1;
float *p2;
p1=&a;
则赋值语句p2=p1是非法的。
9混淆指针说明语句中的*号和执行语句中的*号。
设有以下说明语句:
int *p1, i=1;
则 *p1=&i;是不合法的。
10误将函数形参和函数中的局部变量一起定义。
例如:
fun(x,y)
float x, y, z;
{x++; y++; z=x+y;
┇
}
11所调用的函数在调用前未定义。
main()
{float a=10, b=20, c;
c=fun(a,b);
┇
}
float fun(x, y)
float x, y;
{x++; y++;
┇
}
12混淆结构体类型名和结构体变量名。
若定义了以下结构体类型student:
struct student
{long int num;
char name[20];
int age;
float score;
};
则赋值语句:student.num=199401;是错误的。
二、第二类错误分析
1在用scanf函数给普通变量输入数据时,在变量名前漏写地址运算符&。
如:scanf(″%d%d″, x, y);
2在scanf函数调用语句中,企图规定输入实型数据的小数位。
如执行以下语句:
scanf(″%6.2f″, &a);
3输入数据时的数据形式与要求不符。
用scanf函数输入数据时,必须注意要与scanf语句中的对应形式匹配。如:scanf(″%d,%d″,&x, &y);
若按以下形式输入数据:
2 4
是不合法。数据2和4之间应当有逗号。
4输入、输出时的数据类型与所用格式说明符不匹配。
例如有以下说明语句:
int x=1; float y=2.5;
则运行时执行语句
printf(″x=%f, y=%d\n″, x, y);
将给出与原意不符的结果:(在TURBO C 2.0 下运行)
5混淆"="和"=="。
在C语言中,"="赋值运算符,"=="是关系运算符。
6在不该出现分号的地方加了分号。
例如:if(x>y);
printf(″x is larger than y. \n″);
7对于复合语句,忘记加花括号。
例如: i=1; a=0;
while (i<=10)
a+=i; i++;
printf(″a=%d\n″,a);
8误把数组说明时所定义的元素个数作为最大下标值使用。
C语言规定,引用数组元素时下标从0开始,即下标值的下限为0,而下标的上限值是数组定义时元素个数减1。
9在switch语句的各分支中未使用break语句。
例如: switch(grade)
{case′A′: printf(″85 100\n″);
case′B′: printf(″70 84\n″);
case′C′: printf(″60 69\n″);
case′D′: printf(″<60\n″);
default:
printf(″Error\n″);
}
10混淆break语句和continue语句的作用。
例如: do
{scanf(″%d″,&x);
if(x>0) break;
printf(″%d\n″,x);
}while(x! =0);
11使用++或--运算符时易犯的错误。
如:main()
{int a[5]={1,2,3,4,5},*p;
p=a;
printf(″%d\n″,*(p++));
┇
}
12误解形参值的变化会影响实参的值。
例如: main()
{int a=1, b=3;
swap(a, b);
printf(″a=%d, b=%d\n″,a,b);
}
swap(x,y)
int x,y;
{int m;
m=x; x=y; y=m;
}
原意想通过调用swap函数使a与b的值对换,然而,从输出结果可知a和b的值并未进行交换。