【FCon上海】与行业领袖共话AI大模型、数字化风控等前沿技术。 了解详情
写点什么

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

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

    阅读完需:约 2 分钟

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

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

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

关注

评论

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

最新区块链招聘:高薪招开发产品运营人才

TinTinLand

区块链

Java EE开发系列教程 - 添加JPA模块

爱好编程进阶

Java 程序员 后端开发

与 Dfinity 明星项目面对面,各大赛道开发经验一览

TinTinLand

区块链

网络协议之:haproxy的Proxy Protocol代理协议

程序那些事

Java Netty 程序那些事 4月月更

加入 Flow ,共同成为 Web3的建设者

TinTinLand

区块链

如何在优麒麟上进行超大型文件的远程传输?这个命令帮你快速搞定!

优麒麟

Linux 开源 命令行 优麒麟 远程传输

迎战大厂!“金三银四”和通过率达95%的Java面试八股文

Java架构追梦

Java 后端开发 程序员面试

墨天轮访谈 | 拓扑岭雷鹏:数据库新思维下的弹性压缩与内存计算

墨天轮

数据库 redis 国产数据库 键值数据库

搞懂这份大厂Java面试知识点笔记汇总,涨薪15K你也没问题

Java架构追梦

Java 程序员 后端开发

Java之Spring Boot入门到精通【IDEA版】SpringBoot整合其他框架

爱好编程进阶

Java 程序员 后端开发

【等保小知识】等保测评是安全认证吗?

行云管家

等保 等级保护 等保测评 安全认证

Java8设计模式最佳实战-设计模式概述(第七天学习记录)

爱好编程进阶

Java 程序员 后端开发

技术人的必备特质

Hockor

为团队投资CRM系统的投资回报率是多少?

低代码小观

CRM 客户关系管理 低代码开发 CRM系统 客户关系管理系统

华为数字化转型实践

乌龟哥哥

4月月更

浪潮信息加入,已完成与龙蜥操作系统产品兼容性验证

OpenAnolis小助手

云计算 服务器 龙蜥社区 CLA 浪潮

设备如何使用go sdk轻松连接华为云IoT平台

华为云开发者联盟

华为云 sdk go sdk IoT平台 华为云IoT平台

AIRIOT物联网低代码平台如何配置OPC DA驱动?

AIRIOT

驱动配置

14岁懂社会-《被你讨厌的昆虫们》读书笔记

懒时小窝

读书笔记 14岁懂社会

java中锁的四种状态

爱好编程进阶

Java 程序员 后端开发

Java全栈开发---Java ERP系统开发:商业ERP(七

爱好编程进阶

Java 程序员 后端开发

阿里大牛评:入门到大成!GitHub新上线并发编程深度解析实战PDF

Java架构追梦

Java 后端开发 程序员面试

JavaWeb静态网页

爱好编程进阶

Java 程序员 后端开发

零基础开启 Neo 开发之旅,NEP17 智能合约实战教学

TinTinLand

区块链

以图搜图应用篇-家具家居行业

视觉智能

人工智能 以图搜图 图像搜索 视觉智能

科创人·SUSE大中华区董事长江永清:真开源要有打磨技术的匠心,要能持续创造社会价值

科创人

Java中关于内存泄漏分析和解决方案,都在这里了

爱好编程进阶

Java 程序员 后端开发

云管平台有哪几家?现在采购福利哪家好?

行云管家

云计算 混合云 云管平台

开发一个不需要重写成Hive QL的大数据SQL引擎

华为云开发者联盟

sql 大数据 mapreduce SQL引擎 大数据仓库

JavaCV人脸识别三部曲之三:识别和预览

爱好编程进阶

Java 程序员 后端开发

广袤之中:沿着克拉克三大定律,读懂华为的最深期待

脑极体

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