【内存泄漏】- 3. 使用splint检测c、c++内存泄漏

        在上一篇博文中已经介绍过什么是静态内存分析,静态内存分析可以检测程序的哪些逻辑问题。上篇博文主要讲解cppcheck工具在linux下的使用,这篇博文主要讲解splint工具可以检测哪些代码逻辑,与cppcheck又有哪些区别。

一、 什么是splint

(原来的 LCLint) 是一个GNU免费授权的 Lint程序,是一个动态检查C语言程序安全弱点和编写错误的程序。Splint会进行多种常规检查,包括未使用的变量,类型不一致,使用未定义变量,无法执行的代码,忽略返回值,执行路径未返回,无限循环等错误。

二、 splint与cppcheck的区别

首先第一个区别就是,cppcheck在Jenkins下有插件支持,而splint则没有。另外splint比cppcheck检测得更加严谨,但是这也是依据版本而定,所以也不能很确定的下结论。

 

三、如何在linux下安装splint

官网:http://splint.org/download.html

Linux下安装:

四、 实例

还是使用这个测试代码,并且顺便看看使用splint工具与cppcheck工具检测的结果进行对比。

源码:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
	/* code */
	double a;
	int * p;
	int b;
	int c[2];

	b = 1;
	a = b;					//使用不当的类型转换

	p = (int *)malloc(10);	//申请的内存未释放

	c[2] = 1;				//数组访问越界

	printf("%d\n", b);

	if(a = 5)
	{
		printf("check error\n");
	}

	return 0;
}

使用splint工具:

使用cppcheck工具:

从对比中可以看出,使用splint工具,可以更加严谨的检测出语法异常,比如说if语句。当然这只是简单的例子,从经验上以及可以的角度上看,他们认为静态检测只是比编译器更加严谨的一点,但是并不能作为判断内存泄露的依据。我也做过试验,cppcheck的不同版本,检测的效果是不一样的,所以至今,静态内存泄露检测只是作为一种辅助工具,只能发现一些容易被忽略的问题,并不能解决根本问题。所以还是推荐使用动态内存检测。

【内存泄漏】- 4. 使用python的gc+pyrasite模块检测python内存泄漏

【内存泄漏】- 5. 使用Valgrind工具检测Python内存泄漏

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值