写点什么

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

  • 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:282829
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

文心一言 VS 讯飞星火 VS chatgpt (205)-- 算法导论15.4 1题

福大大架构师每日一题

福大大架构师每日一题

photoshop 2021 对显卡的要求 ps2021中文破解版安装包下载

Rose

ps2021破解版 Photoshop 2021 Photoshop 2021要求

从分享到共创:开放签电子签章系统在开源市场的成长之路与深化开源理念的实践

开放签开源电子签章

开源 电子合同 电子签章

王牌驼,守护肠胃健康与营养均衡的生力军

科技热闻

Parallels Desktop 19 虚拟机如何安装?详细PD19图文安装教程 含激活版Windows镜像

Rose

Win11系统下载 Parallels Desktop 19 pd 19 虚拟机安装

MestReNova 中文版:解析和解释核磁共振(NMR)和质谱(MS)数据

Rose

MestReNova软件 MestReNova14破解版 核磁共振 医学研究

程序员的金三银四求职宝典

贺公子之数据科学与艺术

王牌驼:带领4亿中国中老年群体领跑「精准营养」新时代

科技热闻

VMware Workstation (VM电脑虚拟机)激活精简版

Rose

VMware Fusion破解版下载 虚拟机安装 VM虚拟机密钥

App应用程序(概念、开发步骤、技术要点介绍)

天津汇柏科技有限公司

定制软件开发 app定制开发 软件开发定制

Module2作业

大鹏

用户案例|GreptimeDB 助力贵州某机场智慧能源物联网系统

Greptime 格睿科技

数据库 rust 云原生 时序数据 用户案例

GreptimeDB Roadmap 2024

Greptime 格睿科技

数据库 rust 云原生 时序数据库

C4D 2024.3.2最新破解下载 c4d2024 mac中文版新功能介绍

Rose

3d建模 Cinema 4D 2024 c4d2024

常用的Linux命令;Linux常用命令用法及实现方式

小魏写代码

数智融合,华为云GaussDB(for MySQL)助力企业释放数据新价值

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 华为云GaussDB(for MySQL)

GenAI助力DevOps,塑造软件工程的未来

SEAL安全

人工智能 DevOps 运维 GenAI

二叉搜索树(BST)

贺公子之数据科学与艺术

#算法

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