网站大量收购独家精品文档,联系QQ:2885784924

cppcheck的检查项的实现.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

9988871 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档