|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
系统做了些什么,这需要时间去掌握,(背命令不是一件好的学习方法,相信我你一定会在你背完之前全部忘光),尽量掌握常用命令;
看一下上面的代码(固然包含毛病,以查验splint的功效):
#include
intmain(intargc,char*argv[]){
inta=100;/*没有利用的变量*/
intb[8];
printf("Helloc
");
b[9]=100;/*分明数组越界*/
/*用到了两个为声明的变量c和d/
c=100;
d=10;
return0;
}
如今能够用splint来反省一下,为了查验是不是能够检测到数组越界,利用+bounds选项。
splinthi.c+bounds
输入了局:
hi.c:(infunctionmain)
hi.c:9:2:Unrecognizedidentifier:c
Identifierusedincodehasnotbeendeclared.(Use-unrecogtoinhibit
warning)
hi.c:10:2:Unrecognizedidentifier:d
hi.c:4:6:Variableadeclaredbutnotused
Avariableisdeclaredbutneverused.Use/*@unused@*/infrontof
declarationtosuppressmessage.(Use-varusetoinhibitwarning)
hi.c:7:2:Likelyout-of-boundsstore:
b[9]
Unabletoresolveconstraint:
requires7>=9
neededtosatisfyprecondition:
requiresmaxSet(b@hi.c:7:2)>=9
Amemorywritemaywritetoanaddressbeyondtheallocatedbuffer.(Use
-likely-boundswritetoinhibitwarning)
hi.c:3:14:Parameterargcnotused
Afunctionparameterisnotusedinthebodyofthefunction.Iftheargument
isneededfortypecompatibilityorfutureplans,use/*@unused@*/inthe
argumentdeclaration.(Use-paramusetoinhibitwarning)
hi.c:3:25:Parameterargvnotused
Finishedchecking---6codewarnings
如今具体看一下了局:
反省了局1:
hi.c:9:2:Unrecognizedidentifier:c
Identifierusedincodehasnotbeendeclared.(Use-unrecogtoinhibit
warning)
hi.c:10:2:Unrecognizedidentifier:d
hi.c:4:6:Variableadeclaredbutnotused
Avariableisdeclaredbutneverused.Use/*@unused@*/infrontof
declarationtosuppressmessage.(Use-varusetoinhibitwarning)
这些应当是splint检测到变量c和d没有声明。
反省了局2:
hi.c:7:2:Likelyout-of-boundsstore:
b[9]
Unabletoresolveconstraint:
requires7>=9
neededtosatisfyprecondition:
requiresmaxSet(b@hi.c:7:2)>=9
Amemorywritemaywritetoanaddressbeyondtheallocatedbuffer.(Use
-likely-boundswritetoinhibitwarning)
这些是反省存在数组越界,由于吧b[8]的最年夜数组序号应当是7,而不是9,以是呈现requires7>=9;
反省了局3:
hi.c:3:14:Parameterargcnotused
Afunctionparameterisnotusedinthebodyofthefunction.Iftheargument
isneededfortypecompatibilityorfutureplans,use/*@unused@*/inthe
argumentdeclaration.(Use-paramusetoinhibitwarning)
hi.c:3:25:Parameterargvnotused
这些标明argc和argv变量声了然,可是没有利用。这个不是甚么成绩。
假如当心利用splint,应当关于c言语的程序编写有十分年夜的帮助感化!
</p>
使用gcc或g++进行编译,使用gdb进行调试; |
|