- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
检查类
cppcheck共有15个检查类实现了其检查功能
自动变量检查
自动变量问题
自动变量也就是局部变量,存储空间在栈stack中,函数结束时空间被释放,如果此时变量地址被外部空间的函数使用,将会引起错误。
自动变量暴露到外部窗口
从参数(指向地址变量指针即指向指针的指针)
return
全局指针变量…
其他 ….
自动变量检查
由参数传递局部变量地址
由程序返回
int f(char ** fp)
{
Char c=’a’;
*fp=c;
return 0;
}
char* f(int i)
{
char c=‘a’;
return c;
}
(error) Assigning address of local auto-variable to a function parameter.
(error) Return of the address of an auto-variable
错误举例:
自动变量检查
实现类 class CheckAutoVariables
Class CheckAutoVariables
autoVariables();
检查自动变量
returnPointerToLocalArray();
检查是否返回了指向局部数组的指针
returnReference()
检查是否返货了指向局部变量的引用
returncstr()
检查是否返回局部字符串
CheckAutoVariables.autoVariables()
实现:
关键变量:
std::setstd::string fp_list; 函数参数中指向指针的指针参数集合
std::setunsigned int vd_list; 自动变量集合
std::setunsigned int vda_list; 自动变量数组集合
std::setunsigned int unknown_type;
bool begin_function = false; 进入函数的标志
bool begin_function_decl = false 进入函数参数声明部分标志
函数
CheckAutoVariables.autoVariables()
错误捕获特征
自动变量地址被赋给函数参数
“[;{}] %var% = %var% %var%是fp_list . %var% in vd_list
[;{}] * %var% = %var% %var%是fp_list . %var% in vd_list
[;{}] %var% [ %any% ] = %var%“
%var%是fp_list . %var% in vd_list
自动变量地址返回
return %var% ; %var% in vd_list
无效空间释放
free ( %var% ) ; isAutoVarArray %var% in vda_list
.returnPointerToLocalArray()
提取数组特征
[;{}] %type% %var% [“
将所有数组变量加入到
std::setunsigned intarrayVar
错误特征
“return %var%” 且 %var% 在集合arrayVar中
返回引用函数的问题
std::string f()
{
std::string str_local;
return str_local;
}
当f()运行结束时 str_local其实已经被释放了。
*好消息是 gcc就能查出此类问题
.returnReference()
描述:检查返回自动变量引用的函数
(error) Returning reference to auto variable
关键数据
std::setunsigned int localvar;
存储所有发现的自动变量
寻找目标函数——返回引用的函数
函数特征 %type% %var% (“ 或 %var% (
.returnReference()
提取数组特征
“[;{}] %type% %var% [” 或 “%type% %any% %var%”;
将所有自动变量 加入到 localvar
错误特征
“return %var% ; ” 且 %var% 在集合calvar中
.returncstr()
描述:检查返回字符串自动地址的函数
(error) Returning pointer to aut
文档评论(0)