编程出错预防
㈠ 编程的总是报错怎么办
编程报错是也是对自己的一种锻炼,一句话说得好,从错误中成长嘛。编程的符号,大小写,格式,大部分都有严格规定,也锻炼自己细心观察能力,以及自己的忍耐力,你究竟适合不适合这项工作,这时候问问自己就知道了
㈡ 作为编程员怎样做才能预防制作的bom出错
publicstaticvoidInsertSort(int[]arr)
{
inti,j;
intn=arr.Length;
inttarget;
//假定第一个元素被放到了正确的位置上
//这样,仅需遍历1-n-1
for(i=1;i<n;i++)
{
j=i;
target=arr[i];
while(j>0&&target<arr[j-1])
{
arr[j]=arr[j-1];
j--;
}
arr[j]=target;
}
}
㈢ 51单片机编程让新手最容易出错的几点总结
新手容易出错的地方可能有:
1、数据类型,unsigned char在单片机中是最常用的数据类型,不是c语言中的自字符串或字符类型,新手很容易搞错。
2、关键字的使用,单片机中有很多内部关键字,比如特殊功能寄存器、中断等等,如:P0,SBUF、interrupt、using等等,这些都不能作为用户的变量用,新手常常不太注意。
3、中断的使用,比如独立按键接到外部中断上,编程时一般利用中断来处理,程序上不会明显看到“键”的显示,新手会很迷茫,怎么没有按键处理?
4、 while循环的使用,单片机C语言中,至少有一个while(1)循环,一保证程序运行在可控状态下,新手往往忽略掉,从而造成程序乱飞。
㈣ 如何对待c语言编程中的错误
这时很正常的问题.打代码没有bug才不正常.但是编译时的错误还是比较容易避免的,常见的可以通过以下几种方法解决
语法错误:比如说变量名打错,少一个分号,括号之类的错误,经过你不断的打代码,这样的错误慢慢就会减少了.
编译出错时,一半的方法是将问题从上到下一个一个解决.因为第一个错误可能引发后面的很多错误.因此你每次只需要留意第一个错误.很多情况下,第一个错误解决了,后面的错误自然迎刃而解.
编译出错时,编译器通常会提示出错的行号.寻找错误一半从出错的行号往上找,不需要往下找,看看编译错误的原因是什么,遇到不懂的单词可以查查,以后就明白了.因为错误就那么几个,错来错去还是那几个.
建议写程序的时候,不要等全部代码打完之后再一次性编译.可以分模块,分函数写.写完一个之后,尝试着编译,看看有没有问题,即使有问题,寻找起来也相对会方便一点.不必大海捞针.
至于运行时的bug,这需要随着你的代码量的提高而减少(相对).解决bug的常用方法是debug(调试),具体调试的方法因为不同的开发环境而不同.你可以根据你的开发环境查阅相应的debug文档.
㈤ C++编程中如何防止内存溢出问题
1.
良好的编程习惯是预防内存漏洞的根本2.
正确申请和释放内存空间。3.
记得在每个可能的出口检查指针
导致内存溢出问题的原因有很多,比如:(1)使用非类型安全
(non-type-safe)的语言如C/C++等。
(2)以不可靠的方式存取或者复制内存缓冲区。
(3)编译器设置的内存缓冲区太靠近关键数据结构。
下面来分析这些因素:1.
内存溢出问题是C语言或者C++语言所固有的缺陷,它们既不检查数组边界,又不检查类型可靠性
(type-safety)
。众所周知,用C/C++语言开发的程序由于目标代码非常接近机器内核,因而能够直接访问内存和寄存器,这种特性大大提升了C/C++语言代码的性能。只要合理编码,
C/C++应用程序在执行效率上必然优于其它高级语言。然而,
C/C++语言导致内存溢出问题的可能性也要大许多。其他语言也存在内容溢出问题,但它往往不是程序员的失误,而是应用程序的运行时环境出错所致。2.
当应用程序读取用户(也可能是恶意攻击者)数据,试图复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够时(换言之,假设代码申请了N字节大小的内存缓冲区,随后又向其中复制超过N字节的数据)
最重要的是,
C/C++编译器开辟的内存缓冲区常常邻近重要的数据结构。现在假设某个函数的堆栈紧接在在内存缓冲区后面时,其中保存的函数返回地址就会与内存缓冲区相邻。此时,恶意攻击者就可以向内存缓冲区复制大量数据,从而使得内存缓冲区溢出并覆盖原先保存于堆栈中的函数返回地址。这样,函数的返回地址就被攻击者换成了他指定的数值;一旦函数调用完毕,就会继续执行“函数返回地址”处的代码。非但如此,
C++的某些其它数据结构,比如v-table、例外事件处理程序、函数指针等,也可能受到类似的攻击。
二、解决内存溢出问题
必须知道内存缓冲区的总长度。
检验内存缓冲区。
提高警惕。
多态性,在c++中指具有不同功能的函数可以用同一个函数名,即可以用同一个函数名调用不同内容的函数。向不同的对象发送用一个消息,不同的对象在接收同样的消息,会产生不同的行为(方法)。
从系统实现角度来看。多态性分为两类:静态多态性和动态多态性。
静态多态性:在程序编译时系统就能决定调用哪个函数,因此静态函数有称编译时的多态性(实质上是通过函数的重载实现)
。例如:函数的重载和运算符重载实现.
动态多态性:运行过程中才动态地确定操作指针所指的对象。主要通过虚函数和重写来实现。
㈥ c语言写的排列数与组合数 不限范围 我写的这个下限太大就会出错怎么样避免 这是个排列数编程
原则上讲这是无法避免的。因为计算机能表达数总是有限的。你这里改变一下写法可以有所改善,但无法根除。把else后到max=max1/max2;全删除,改为——
{max=bottom;
for(intx=max-top,i=max-1;i>x;max*=i--);}
㈦ 编程中如何避免循环出错,程序直接卡死
注意是否结束条件永远不成立
比如unsigned
int
i
你要求i
>=
0
那肯定死循环啦
如果遇到程序很久没结束,怕死循环
可以中断程序
在循环中,添加打印语句,
打印一些值,来看值的变化
㈧ SSOS项目的软件缺陷预防过程有哪几个阶段
SSOS项目的软件缺陷预防过程有以下4个阶段:
第1阶段:确定缺陷的技术原因并改正;
第2阶段:确定并改正缺陷的过程原因;
第3阶段:改正遗漏缺陷的缺陷检测活动;
第4阶段:检查产品中别处的类似缺陷。
发现软件缺陷后,要尽快修复缺陷。其原因在于错误并不只是在编程阶段产生,需求和设计阶段同样会产生错误。也许一开始,只是一个很小范围内的错误,但随着产品开发工作的进行,小错误会扩散成大错误,为了修改后期的错误所做的工作要大得多,即越到后来往前返工也越远。如果错误不能及早发现,那只可能造成越来越严重的后果。缺陷发现或解决的越迟,成本就越高。
(8)编程出错预防扩展阅读:
软件缺陷的表现形式不仅体现在功能的失效方面,还体现在其他方面。主要类型有:软件没有实现产品规格说明所要求的功能模块;软件中出现了产品规格说明指明不应该出现的错误;软件实现了产品规格说明没有提到的功能模块;软件没有实现虽然产品规格说明没有明确提及但应该实现的目标;软件难以理解,不容易使用,运行缓慢,或从测试员的角度看,最终用户会认为不好。
㈨ 怎么编写代码当预防和阻止bug
一、 沟通设计先行
为避免需求或业务逻辑理解的不完全或偏差, 或者设计上存在较大的缺陷, 导致后期不必要的返工, 耗费宝贵的时间和精力, 编程开发遵循的首要准则是沟通设计先行: 与需求方、业务方和工作伙伴多多沟通交流, 进行设计评审, 能够有效地减少因为需求、业务理解偏差导致的逻辑错误和个人经验不足导致的设计错误。 编程与交流活动的适当调节, 也非常有益于延长程序员的寿命。
软件工程师应下决心下功夫锻炼和提升自己的表达能力与语言沟通素养。
二、 尽可能复用
编写和测试可复用代码, 尽可能复用经过严格测试的可靠公共库。 代码复用、组件复用、框架复用、 接口规范复用、设计模式复用、开发架构复用、 甚至应用模板复用; 复用使得可以从 40% , 甚至 60% 快速起步, 而不是从 0% 开始。工作量的压力小了, 很大程度上会消减因为进度压力导致的代码质量低下的问题。
创建一个应用工程模板, 将你在实际工作项目中所学习到的、所探索到的和所创造的重要知识、技术和经验聚合到这个系统, 让它成为你工作中的百宝箱。
三、 做的更多
之前对参数校验、前置条件、 结果校验是不是做得不充分, 补上吧! 之前对错误和异常考虑是不是不够周全, 补上吧 ! 之前的单元测试、 接口测试是不是基本没怎么做, 补上吧!
哇! 也许你会说, 工作量增大了好多! 有时间去做这么多工作吗? 这就要应用到第三条法则: 做得更少。
四、 做得更少
“做得更少”有三层含义:
(1) 尽可能自动化, 减少手工操作, 凡是操作不方便的、信息需要记忆的, 就要集成到程序中自动化完成, 避免不必要的脑力消耗; 比如查看日志排查问题, 《使用getopt解析命令行一例》, 就编写了一个脚本, 能够获取所有应用服务器的日志并按照内容关键字进行筛选展示, 而不需要手动逐个登陆应用服务器去查看日志了, 也不需要记忆日志地址, 做到最简化, 还学到了新技能。 脑力应该思考最重要的事情, 尤其是判断和决策相关;
(2) 要尽可能创造新的技术和方法, 将耗时繁琐的工作变成轻松的工作; 比如编写单元测试是比较“没技术含量”的事情, 能不能编写程序自动化生成可执行的测试用例呢? 这不就转换成“很有技术含量”的事情了。 《Jtester+unitils+testng:DAO单元测试文件模板自动生成》 展示了一个例子。
(3) Write Less and Do More. 《编程语言与可复用性》展示了 Python 是如何用一行代码来解决一个可复用性很强的小功能的。 日常编程中, 也应多思, 提炼出问题的核心概念及交互, 用更少的代码实现更多的功能。这是软件开发中最具创造力的地方。
所有繁琐的、没有“技术含量”的活, 都可以转化成非常需要创造力的、富有“技术含量”的挑战。 取决于做事思路的转换。
五、 创造“编程心流”
“心流”是做一件事非常流畅自如且非常享受的状态。 当处于“心流”状态时:
(1) 感觉时间过得很快, 不知不觉;
(2) 全身心投入, 热情创造;
(3) 专注、娴熟自如地做事;
(4) 如果有些事情不懂, 会努力去学会它。
六、 严格的程序测试
严格的程序测试可以找出很多常见的编程错误, 应充分信任程序测试的作用, 充分而严格地测试程序。
通过严格的程序测试, 将使编写代码的信心大增, 能够更大胆地重构, 尝试新技术, 拓展新领域。