- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
splint安装及使用
[[splint]]
TurboLinux知识库
窗体顶端
?目录
一.splint介绍
二.splint的安装
1.rpm安装
2.源代码安装
三.splint的使用
1.空引用错误
2.未定义的变量错误
3.类型错误
4.内存检查
一.splint介绍
splint是一个动态检查C语言程序安全弱点和编写错误的程序.splint会进行多种常规检查,包括未使用的变量,类型不一致,使用未定义变量,无法执行的代码,忽略返回值,执行路径未返回,无限循环等错误.
二.splint的安装
1.rpm安装
GTES 10.5和11版本已经整合有splint软件包,直接可以使用.
2.源代码安装
下载地址:
/downloads/splint-3.1.2.src.tgz
源码包安装:
# tar zxvf splint-3.1.2.src.tgz
# cd splint-3.1.2
# ./configure
# make install
三.splint的使用
1.空引用错误
在引用没有指向任何内存地址的指针时,会导致这种错误.也就是使用了一个没有赋值的指针.splint支持一种特别的注释.这种注释写在C程序代码中,用于对程序进行特殊说明.如下面这段程序.使用了/*@null@*/进行了说明,表示说明*s的值可能会是NULL.
//null.c
char firstChar1 (/*@null@*/ char *s)
{
return *s;
}
char firstChar2 (/*@null@*/ char *s)
{
if (s ==NULL) return \0;
return *s;
}
//END
使用splint扫描这个程序时,会输出:
# splint null.c
Splint 3.1.1 28 Apr 2005
null.c: (in function firstChar1)
null.c:3:11: Dereference of possibly null pointer s: *s
null.c:1:35: Storage s may become null
Finished checking 1 code warning found
由于firstChar1和firstChar2都使用了null说明,表示指针s可能是个NULL值.
所以,splint会对s值的使用情况进行检查.因为firstChar2函数中,对s的值进行
了NULL的判断.所以,没有对firstChar2函数的指针s输出警告信息.
2.未定义的变量错误
C语言中,要求先定义变量,而后才可使用.所以,当使用一个没有定义的变量时,编译就会出错.如下例,使用/*@in@*/说明的变量,表示必须进行定义.使用/*@out@*/说明的变量,表示在 执行过此函数后,这个变量就进行了定义.
// usedef.c
extern void setVal (/*@out@*/ int *x);
extern int getVal (/*@in@*/ int *x);
extern int mysteryVal (int *x);
int dumbfunc (/*@out@*/ int *x, int i)
{
if (i 3) return *x;
else if (i 1)
return getVal (x);
else if (i == 0)
return mysteryVal (x);
else
{
setVal (x);
return *x;
}
}
// END
使用splint检查usedef.c
$ splint usedef.c
Splint 3.1.1 28 Apr 2005
usedef.c: (in function dumbfunc)
usedef.c:7:19: Value *x used before definition
An rvalue is used that may not be initialized to a value on some execution
path. (Use -usedef to inhibit warning)
usedef.c:9:18: Passed storage x not completely defined (*x is undefined):
getVal (x)
Storage derivable from a parameter, return value or global is not defined.
Use /*@out@*/ to denote pass
您可能关注的文档
最近下载
- 蒂森823扶梯图纸.pdf VIP
- YD-T 1539-2019 通信行业标准规范 移动通信手持机可靠性技术要求和测试方法.pdf VIP
- CEGC+II+新英语语法教程.doc
- Q_SYW 004-2019脚气灵消菌液企业标准.pdf
- 西天山的增生造山过程 - 地质通报.PDF VIP
- 《四川省海绵城市建设技术导则(试行)》.docx VIP
- Q_GDW 1140-2014 交流采样测量装置运行检验规程.PDF VIP
- 防水监理细则.doc VIP
- 建筑工程机电安装系统调试方案.docx VIP
- 低代码应用开发 课件全套 李春平 第1--9章 低代码应用开发 --- 低代码开发应用实例.pptx
文档评论(0)