cppcheck的检查项的实现课件.pptx

cppcheck的检查项的实现课件.pptx

ID:57292375

大小:489.90 KB

页数:39页

时间:2020-08-10

cppcheck的检查项的实现课件.pptx_第1页
cppcheck的检查项的实现课件.pptx_第2页
cppcheck的检查项的实现课件.pptx_第3页
cppcheck的检查项的实现课件.pptx_第4页
cppcheck的检查项的实现课件.pptx_第5页
资源描述:

《cppcheck的检查项的实现课件.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、检查类cppcheck共有15个检查类实现了其检查功能自动变量检查自动变量问题自动变量也就是局部变量,存储空间在栈stack中,函数结束时空间被释放,如果此时变量地址被外部空间的函数使用,将会引起错误。自动变量暴露到外部窗口从参数(指向地址变量指针即指向指针的指针)return全局指针变量…其他….自动变量检查由参数传递局部变量地址由程序返回intf(char**fp){Charc=’a’;*fp=&c;return0;}char*f(inti){charc=‘a’;return&c;}(error)Assigningaddressoflocalauto-varia

2、bletoafunctionparameter.(error)Returnoftheaddressofanauto-variable错误举例:自动变量检查实现类classCheckAutoVariablesClassCheckAutoVariablesautoVariables();检查自动变量returnPointerToLocalArray();检查是否返回了指向局部数组的指针returnReference()检查是否返货了指向局部变量的引用returncstr()检查是否返回局部字符串CheckAutoVariables.autoVariables()实现:关

3、键变量:std::setfp_list;函数参数中指向指针的指针参数集合std::setvd_list;自动变量集合std::setvda_list;自动变量数组集合std::setunknown_type;boolbegin_function=false;进入函数的标志boolbegin_function_decl=false进入函数参数声明部分标志函数CheckAutoVariables.autoVariables()错误捕获特征自动变量地址被赋给函数参数“[

4、;{}]%var%=&%var%"%var%是fp_list.%var%invd_list"[;{}]*%var%=&%var%"%var%是fp_list.%var%invd_list"[;{}]%var%[%any%]=&%var%“%var%是fp_list.%var%invd_list自动变量地址返回"return&%var%;"%var%invd_list无效空间释放"free(%var%);"isAutoVarArray%var%invda_list.returnPointerToLocalArray()提取数组特征"[;{}]%type%%var%[“

5、将所有数组变量加入到std::setarrayVar错误特征“return%var%”且%var%在集合arrayVar中返回引用函数的问题std::string&f(){std::stringstr_local;returnstr_local;}当f()运行结束时str_local其实已经被释放了。*好消息是gcc就能查出此类问题.returnReference()描述:检查返回自动变量引用的函数(error)Returningreferencetoautovariable关键数据std::setlocalvar

6、;存储所有发现的自动变量寻找目标函数——返回引用的函数函数特征"%type%&%var%(“或">&%var%(".returnReference()提取数组特征“[;{}]%type%%var%[”或“%type%<%any%>%var%”;将所有自动变量加入到localvar错误特征“return%var%;”且%var%在集合calvar中.returncstr()描述:检查返回字符串自动地址的函数(error)Returningpointertoautovariable关键数据std::setlocalvar;存储所有发现的自动变量

7、寻找目标函数——返回字符串的函数特征"constchar*"或">&%var%(".returncstr()提取变量特征"%type%%var%[;=]"localvar.insert(tok2->next()->varId());将所有自动变量加入到localvar错误特征"return%var%.c_str();“且%var%在集合localvar中存在问题没有处理指针传递识别不精确错误检查不精确缓冲区溢出检查缓冲区溢出问题缓冲区也就是一块内存空间,它可以是在栈中的局部变量(例如,静态数组),也可以是堆中的内存区域,程序中动态产生(例如,malloc,C++

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。