- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
如何减少编码过程中的错误。第一部分
摘要
我查看了广为熟知的即时聊天工具 HYPERLINK / \t _blank Miranda IM 的源代码。该项目的规模非常大,将各种插件全部考虑在内,大约包括 950,000 个 C 和 C++ 代码行。与其它任何开发时间较长的大型项目相同,它存在很多错误和错字。
简介
以下是整篇文章的缩简版,若想阅读全部内容,请点击 HYPERLINK /en/a/0070/ 此处。
通过检查不同应用中存在的缺陷,我总结出一些规律。接下来,我会列举一些在 Miranda IM 中找到的缺陷示例,并尝试提出相关建议,帮助您避免大量可能在编码阶段发生的错误和错字。
我使用了 HYPERLINK /en/pvs-studio/ PVS-Studio 4.14 分析器来检查 Miranda IM 程序。Miranda IM 项目的代码质量非常高,这一点有它的受欢迎程度为证。我自己也在使用这款聊天工具,对它的质量十分满意。项目采用支持 3 级警告(/W3)的 Visual Studio 构建而成,不过注释的数量占去了整个项目资源的 20%。
1. 避免使用 memset、memcpy、ZeroMemory 和其它类似函数
首先,我想与大家分享一些使用低级函数如 memset、memcpy 和 ZeroMemory 等处理内存时可能出现的错误。
我建议您想尽一切方法避免使用这些函数。当然,您也无需完全以此为准,将所有这些函数全部使用循环来替代。不过,我看到过许多因使用这些函数所犯的错误,强烈建议您慎之又慎,只在确实有必要时才使用它们。我认为,只有以下两种情况必须使用这些函数:
1) 处理大型阵列时,即当您能够从优化的函数算法中获得优于简单循环的、切实可见的惠益时。
2) 处理大量小型阵列时,此处必须采用低级函数的原因也与性能提升有关。
但是,在所有其它情形中,您最好尽量避免使用上述低级函数。例如,我认为,在类似 Miranda 这样的程序中,根本没有必要使用这些函数,因为 Miranda 不包括任何资源密集型算法和大型阵列。事实上,使用 memset/memcpy 等函数的唯一原因是编写短代码的方便性。然而,这种简易性具有很大的欺骗性,虽然编写代码时能够节省几秒钟的时间,但您可能需要花费几周的时间来查找由此造成的难以察觉的内存损坏错误。下面,让我们共同分析一下来自 Miranda IM 项目的几个代码示例。
HYPERLINK /en/d/0101/ V512 A call of the memcpy function will lead to a buffer overflow or underflow. tabsrmm utils.cpp 1080
HYPERLINK /zh-cn/articles/how-to-make-fewer-errors-at-the-stage-of-code-writing-part-n1-subset/?cid=sw:prccsdn1981 - collapse source HYPERLINK /zh-cn/articles/how-to-make-fewer-errors-at-the-stage-of-code-writing-part-n1-subset/?cid=sw:prccsdn1981 view plain HYPERLINK /zh-cn/articles/how-to-make-fewer-errors-at-the-stage-of-code-writing-part-n1-subset/?cid=sw:prccsdn1981 copy to clipboard HYPERLINK /zh-cn/articles/how-to-make-fewer-errors-at-the-stage-of-code-writing-part-n1-subset/?cid=sw:prccsdn1981 print HYPERLINK /zh-cn/articles/how-to-make-fewer-errors-at-the-stage-of-code-writing-part-n1-subset/?cid=sw:prccsdn1981 ?
typedef?struct?_textrangew ??
{ ??
??CHARRANGE?chrg; ??
??LPWSTR?lpstrText; ??
}?TEXTRANGEW; ??
??
const?wchar_t*?Utils::extractURLFromRichEdit(...) ??
{ ??
??... ??
??::CopyMemory(tr
文档评论(0)