2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

一份编程错误列表强调静态代码分析有其必要性

  • 2012-12-19
  • 本文字数:761 字

    阅读完需:约 2 分钟

Program Verification Systems 公司(针对 C 和 C++ 的静态代码分析工具 PVS-Studio 就是该公司的产品)发布了一份编程错误列表,有些错误是从Chromium、TortoiseSVN、Apache HTTP Server 和MySQL 等流行的开源项目中发现的。

这份列表维护的编码错误有150 多类,有的是严重的逻辑错误,有的是性能相关的问题,还有一些危害并不是很大。

下面是选自该列表的一些错误类型,示例代码都来自真实项目。

V502 ——或许‘?:’运算符的工作方式和想象中并不相同。该运算符的优先级比很多运算符都要低。

MongoDB:

复制代码
string sysInfo() {
....
stringstream ss;
....
ss << (sizeof(char *) == 8) ? " 64bit" : " 32bit";
....
}

这是一个很好的例子。这段代码打印的是 0 或 1,而非“32bit”或“64bit”。

V511 ——在如下表达式中,sizeof 运算符返回的是指针的大小,而非数组的大小。

Chromium:

复制代码
uint8 salt_[LINK_SALT_LENGTH];
VisitedLinkMaster::TableBuilder::TableBuilder(
VisitedLinkMaster* master,
const uint8 salt[LINK_SALT_LENGTH])
: master_(master),
success_(true) {
fingerprints_.reserve(4096);
memcpy(salt_, salt, sizeof(salt));
}

“salt”对象就是一个指针。方括号中的值 LINK_SALT_LENGTH 向程序员表明,他们正在使用的是一个包含 LINK_SALT_LENGTH 个元素的数组。但传递给函数的并不是数组——只是个指针。因此,表达式 sizeof(salt) 返回的值是 4 或 8(32 位或者 64 位系统上指针的大小)。

到目前为止,这个列表上列出的、出现于各种开源项目的错误,很多可能已经修复。因为任何程序员都难免出错,所以使用一个或多个静态代码分析工具处理一下源代码是个不错的建议。Wikipedia 上有一个页面,列出了很多针对不同语言的静态代码分析工具。

参考英文原文 An Errors List Underscores the Need for Static Code Analysis

2012-12-19 08:282711
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 142.7 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

全面解析ArrayList,超详细!

程序员的时光

面试 ArrayList JAVA集合

架构师训练营第 1 期第 7 周作业

owl

极客大学架构师训练营

大厂程序员必备的一套浏览器书签,我帮你整理好了。[下载导入浏览器]

小傅哥

Java 程序员 小傅哥 资料整理 浏览器书签

《迅雷链精品课》第一课:认识区块链

迅雷链

区块链

架构师训练营第八周总结

邓昀垚

分库分表的 9种分布式主键ID 生成方案,挺全乎的

程序员小富

分库分表 Java 分布式

接口测试如何在post请求中传递文件

测试人生路

接口测试

Reactor:深入理解reactor core

程序那些事

响应式编程 reactor 程序那些事 响应式系统 reactivex

架构师训练营第 1 期 第 7 周作业

李循律

极客大学架构师训练营

数据结构与算法系列之链表操作全集(三)(GO)

书旅

数据结构 Go 语言

体验RxJava和lambda

程序员欣宸

训练营第三周学习总结

爱码士

训练营

第三届进博会恒大农牧开馆迎客,旗下进口食品受热捧!

最新动态

第七周作业

第7周 性能优化(一)作业

蓝黑

极客大学架构师训练营

架构师训练营第 1 期第 8 周作业

业哥

2020LF AI&DATA DAY(AI开源日):中国开源社区迈入全球化新征程

第 7 周 性能优化(一)总结

蓝黑

极客大学架构师训练营

“开源软件供应链点亮计划-暑期2020”公布结果 基于ChubaoFS开发的项目获得最佳质量奖

京东科技开发者

大数据 开源 云原生

天啦撸!打印日志竟然只晓得 Log4j?

沉默王二

Java 日志 log4j

程序员的十年之痒

苹果看辽宁体育

程序员 程序人生

训练营第三周作业

爱码士

训练营

会展云技术解读 | 面对突发事故,APP如何做好崩溃分析与性能监控?

京东科技开发者

云计算 云服务

【涂鸦物联网足迹】API及SDK介绍

IoT云工坊

软件开发 物联网 API sdk 云平台

架构师训练营第八周作业

邓昀垚

极客大学架构师训练营

go-zero如何追踪你的请求链路

万俊峰Kevin

Trace microservice Go 语言

tomcat打包成rpm包

lee

tomcat rpm

简析低代码开发与传统开发的区别与优势

Marilyn

敏捷开发 低代码

嗯,查询滑动窗口最大值的这4种方法不错...

王磊

Java 数据结构和算法

第七周总结

数据结构与算法系列之栈&队列(GO)

书旅

数据结构与算法 Go 语言

一份编程错误列表强调静态代码分析有其必要性_语言 & 开发_Abel Avram_InfoQ精选文章