如何快速有效地找出程序错误(C语言篇)

我想大多数刚开始学习C语言的人都和我以前一样,自己好不容易敲出的程序代码在调试运行时却出错了,而自己却不知道错误出在哪儿,怎么去修改。多数人的第一反应就是摸不着头脑了,然后索性根据自己的逻辑去修改代码,结果反而越改越错。以下是我总结的一些查找错误的方法。

首先查找代码是否存在逻辑错误:

1.变量使用前未被数值

实例:

int main()

  {

    int x=5,y,z;

    z=x*y;

    printf("%d",z);

    return 0;

  }

在此程序中变量y在使用之前未被赋值,所以结果输出z的值就会是系统随机分配一个值给y再加乘以x的值。

2.把赋值赋值符号“=”与等于符号“==”相混淆

  实例:

    有一下语句:

if(a=5)

{

    printf("a等于5");

  }

  这样一来输出的结果永远都是“a等于5”,原因是在执行if(a=5)之时,无论a之前是什么值,此时都会被重新赋值为5,而不是把a的值与5相比较,而正确的表示比较的表示为:

   if(a==5)

{

    printf("a等于5");

  }

  3.switch语句中缺少break,do{}while()语句中while()之后缺少“;”等等。

其次首先查找代码是否存在算法错误:

以交换两个变量的值得算法为例:

  正确的算法如下:

  int main()

  {

    int a=5,b=10,temp;

    temp=a;

    a=b;

    b=temp;

    printf("%d %d",a,b);

    return 0;

  }

  如果将temp=a;a=b;b=temp;的顺序随意调换就不会实现将a和b的值交换。

最后也是最容易犯的低级错误:

比如一条语句结束后忘了打";",输入语句“scanf("%d",a)”中赋值参数a之前忘了地址符“&”等等。

我想按照以上的步骤来查找代码的错误会变得快速有效的,不妨试试哦!

时间: 2024-12-11 19:22:21

如何快速有效地找出程序错误(C语言篇)的相关文章

用windbg+sos找出程序中谁占用内存过高,谁占用CPU过高(转载)

原文地址: http://www.cnblogs.com/Lawson/archive/2011/01/23/1942692.html 很早看到windbg+sos方面的知识,一直没仔细学习,也许因为自己做的系统还不够复杂,也没线上真实环境查看的权限,一直没学习这方面的知识,最近几天仔细找了这方面的资料,自己也写了个可能造成高CPU高内存的测试web页面,发现确实不错,即使一个生手,也可以用工具连蒙带骗的猜出哪里出了问题,当然对一些命令和内部标示更熟悉了后,可以更好的找出问题所在,非常值得学习.

找出程序cpu使用率高的原因

确定是CPU过高 使用top观察是否存在CPU使用率过高现象 找出线程 对CPU使用率过高的进程的所有线程进行排序 ps H -e -o pid,tid,pcpu,cmd --sort=pcpu |grep xxx得到如下结果,其中线程2909使用了7.8%的CPU. 2907 2913 0.0 ./xxx 2907 2909 7.8 ./xxx也可以通过查看/proc中的信息来确定高CPU线程. 打印了4列,线程ID,线程名,用户时间和内核时间(排名未分先后) awk '{print $1,$

软件测试作业二——找出程序中的错误

一.软件程序中的错误 软件程序中的错误有三种:faults(故障), errors(错误), failures(失败). 软件故障(faults):软件中的静态缺陷. 软件错误(errors):不正确的内部状态,该状态是某个故障的表现. 软件失败(failures):与需求或其他期望行为的描述有关的,外部的,不正确的行为. 二.分析下列程序 程序一: public int findLast (int[] x,int y){ //Effects:If x==null throw NullPoint

利用WinDbg找出程序崩溃的代码行号

http://blog.csdn.net/ccnyou/article/details/8879536 此文转载自VC驿站:http://www.cctry.com/forum.php?mod=viewthread&tid=41078 之前碰到论坛里有几个好友,说程序不时的崩溃,什么xxoo不能read的! 如果光要是这个内存地址,估计你会疯掉~~ 所以分享一下基本的调试技巧,需要准备的工具有WinDbg + VC6.0, 下面是自己整理的一份自动生成DUMP文件的源代码,只需要添加到工程即可,

【android】通过leakCanary找出程序内存泄露点

背景 内存泄露是咱新手比较头痛的问题,因为它不像崩溃,在开发环境可以根据提示的错误信息排查问题. 你都不知道咱的app是否哪个犄角旮旯藏着一个吞噬内存的黑洞. 排查android 内存泄露比较底层高端的做法:使用官方的内存分析工具(MAT), 比较好的两篇入门文章:(一) 和 (二) 然而这个过程比较考验耐心, 咱新手也可以选择另外一款App的插件leakcanary,集成了这个插件,我们在使用app的时候,遇到内存泄露点,它就会弹出通知,并告知泄漏点(release下不会弹框). 实战 咱们就

WINDOWS 下端口被占用时找出程序

#1.查看所有的端口占用情况 #开始-运行-CMD    输入:C:\>netstat -ano Active Connections Proto  Local Address          Foreign Address        State           PID  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       1104  TCP    0.0.0.0:135            0.0

仅通过崩溃地址找出源代码的出错行

作为程序员,我们平时最担心见到的事情是什么?是内存泄漏?是界面不好看?--错啦!我相信我的看法是不会有人反对的--那就是,程序发生了崩溃! "该程序执行了非法操作,即将关闭.请与你的软件供应商联系.",呵呵,这句 M$ 的"名言",恐怕就是程序员最担心见到的东西了.有的时候,自己的程序在自己的机器上运行得好好的,但是到了别人的机器上就崩溃了:有时自己在编写和测试的过程中就莫名其妙地遇到了非法操作,但是却无法确定到底是源代码中的哪行引起的--是不是很痛苦呢?不要紧,本

找出占用高的进程

1.找出僵尸进程ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' -A 参数列出所有进程 -o 自定义输出字段,我们设定显示字段为stat(状态),ppid(父进程pid),pid(进程pid),cmd(命令行)这四个参数因为状态为 z 或者 Z的进程为僵尸进程,所以我们使用grep 抓取stat 状态为zZ进程: 运行后,在此运行ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' 来确认是否将僵尸进程杀死:如果kill

程序员面试100题之十:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值(转)

能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解. 假如有如下的两个数组,如图所示: 5,6,1,4,7,9,8 给定Sum= 10 1,5,6,7,8,9 给定Sum= 10 分析与解法 这个题目不是很难,也很容易理解.但是要得出高效率的解法,还是需要一番思考的. 解法一 一个直接的解法就是穷举:从数组中任意取出两个数字,计算两者之和是否为给定的数字. 显然其时间复杂度为N(N-1)/2即O(N^2).这个算法很简