检查实现类
- 6. CheckAutoVariables.autoVariables() 实现: 关键变量: std::set<std::string> fp_list; 函数参数中指向指针的指针参数集合 std::set<unsigned int> vd_list; 自动变量集合 std::set<unsigned int> vda_list; 自动变量数组集合 std::set<unsigned int> unknown_type; boolbegin_function = false; 进入函数的标志 boolbegin_function_decl = false 进入函数参数声明部分标志 函数
- 7. 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
- 13. .returncstr() 提取变量特征 "%type% %var% [;=]" localvar.insert(tok2->next()->varId()); 将所有自动变量 加入到localvar 错误特征 "return %var% . c_str ( ) ;“且 %var% 在集合localvar中
- 18. 缺陷 不支持指针传递 识别缓冲区精确度不高 动态数组,malloc固定空间等缓冲区不能识别 字符串常量 char* p=“hello” (注:这段空间不是缓冲区,不可写哦) 内存操作函数检查的覆盖面不光,及一些双内存空间操作检查的不好 如memcpy(void *destin, void *source, unsigned n);
- 21. 类检查 主要实现函数 checkClass.constructors(); checkClass.operatorEq(); checkClass.privateFunctions(); checkClass.thisSubtraction(); checkClass.checkConst(); checkClass.virtualDestructor(); checkClass.operatorEqToSelf(); checkClass.operatorEqRetRefThis();
- 24. 内存泄露检查 内存泄露问题 内存泄露指的是在程序运行时,动态的申请了内存(堆),但是使用过后没有释放,导致一些内存永远得不到收回。 这是cppcheck最有价值的检查功能,也是实现代码最长的一块检查
- 25. 内存泄露检查 实现类 class CheckMemoryLeakStructMember class CheckMemoryLeakInFunction class CheckMemoryLeakInClass class CheckMemoryLeakNoVar