看了VCKBase上周星星的《两个恶习》。原文的URL:http://blog.vckbase.com/bruceteen/archive/2010/06/11/47620.html
第二个所谓的“恶习”是:对于不再使用的指针赋零。
我认为作者是错误的。
给野指针赋零,应该和变量初始化一样,都是C++程序员应有的好习惯。不应该称之为“恶习”!
文章下面持反对意见者中,“七猫”的回帖让我印象最为深刻。他说的“防御性编程”深合我心。之前我从未听说过这一词汇,但是其间蕴含的“软件工程”思想却和我这两年从商业软件编程的实践中得到的经验教训是一致的。释放了内存却不归零的指针是为“野指针”,一旦为人所误用,就构成了威胁,就意味着若干小时的debug工作量,就意味着加班,就意味着压力,就意味着开发周期的加长、经费的增加。
周星星在文章中不断重复着一句话:“给不再使用的指针赋零是浪费”。可现实是,我们经常要面对着若干年前遗留的代码,许多别人开发的程序库,我们要使用许多别人编写的类,修改已经离职的人的bug。难道说,我们要看遍所有的程序逻辑之后才决定某个指针已经确实“不再使用”了吗?就算都是自己的代码,在设计几经更改之后,十个月之后,你仍然记得某个指针的生存周期?
这个时候,给指针赋个零,这就相当于告诉别人:“此指针已经释放,不得使用!”。多么简单经济。
想到以前在JavaEye上看到的一篇文章,作者说,在程序中注释其实是不必要的。其中之一的理由是:“某个国外的高手说,重构好的代码无需注释。”
问题是,他以什么标准来判定代码已经重构好?他怎么知道将来的设计会不会影响到这些代码?他怎么知道将来不会有人修改这些代码?
如果无法知道代码在何时可以保持稳定,那么只能保守地认为重构将贯穿代码存在的始终。
分享到:
相关推荐
### NULL指针、零指针、野指针定义及区别 #### 一、空指针、NULL指针、零指针 ##### 1.1 什么是空指针常量 在计算机编程中,特别是C/C++语言中,空指针常量是指一系列表示“无指向”或“未指向任何有效地址”的值...
### C野指针处理 #### 一、野指针的概念 野指针,是指向不可用内存区域的指针。这种指针的操作可能导致程序发生不可预知的错误,例如程序崩溃、数据损坏等严重后果。 #### 二、野指针与NULL指针的区别 野指针...
内存泄漏和野指针是C/C++编程中两个常见的错误,理解它们可以帮助程序员编写更高效、更稳定的程序。 **内存泄漏** 内存泄漏是指程序在动态分配内存后,未能正确地释放不再使用的内存区域。当一个内存块被分配但...
然而,不当的指针使用也会导致程序中的错误,其中最常见的就是野指针问题。本文将详细探讨野指针的定义、产生的原因以及如何避免这些问题。 #### 二、野指针定义 野指针是指向不确定或无效内存区域的指针。与NULL...
- 如果指针指向的内存空间超出了变量的作用范围,如指向了局部变量的地址,而这些局部变量在函数退出后就会被释放,此时指针也将变为野指针。 - **示例代码:** ```c #include int *get_address() { int x =...
杜绝野指针.docx杜绝野指针.docx
例如,在函数中定义一个局部变量,然后将其地址赋给指针,当函数结束时,局部变量的内存空间将被释放,但是指针仍然指向该内存空间。这时,如果使用指针访问该内存空间,可能会导致程序崩溃或数据损坏。 ### 3. ...
知识点:避免野指针的方法是,在定义指针变量时给它一个初值,如“NULL”,然后使用malloc函数给指针分配一块存储空间,最后再主动释放掉这段内存区域。 知识点:使用malloc函数可以避免野指针,因为malloc函数可以...
82.野指针
- 指针之间也可以进行比较运算(如 `, `>`, `==` 等)。 - 这些运算是基于它们所指向的内存地址来进行的。 #### 五、指针的高级应用 1. **动态内存分配**: - 使用 `malloc()` 和 `free()` 函数来动态分配和...
在C语言编程中,野指针和内存操作是两个非常重要的概念,特别是在处理程序的运行时行为和资源管理时。野指针是指未初始化或已失效的指针,而内存操作则涵盖了动态内存分配、释放以及对内存块的读写等操作。本课程将...
就是把 pi 的地址赋给了 ppi。即将地址值 10 赋值给 ppi。 如下图: 内存地址→6 7 8 9 10 11 12 13 14 15 ------------------------------------------------------------------------------------ … | 50 | | |...
C 语言指针是其核心特性之一,是程序员能够直接操控内存的重要工具。指针是一个变量,这个变量存储的是另一个变量的内存地址。通过指针,我们可以高效地访问和修改内存中的数据,尤其是在处理大型数据结构、动态内存...
西门子自动化系统中,ANY指针是一种特殊的数据类型,用于在程序中灵活地引用不同类型的数据。在STEP 7编程软件中,ANY型指针用于存储数据块DB、多重实例MI或局部数据LD等任何数据类型的引用。当需要计算ANY型指针的...
一、指向没有访问权限的内存 二、指向释放掉的内存 三、规避野指针
9 如何避免“野指针” 10 C++ 仿函数是干什么用的? 11 什么时候使用虚析构函数? 为什么? 12 为什么将 0.1f 更改为 0 性能会降低 10 倍? 13 什么时候使用对象指针,什么时候使用对象本身? 14 在C++中,构造函数...
"空指针和 0、NULL 之间的关系" 空指针和 0、NULL 之间的关系是编程语言中一个重要的概念,了解它们之间的关系对于编写高效、可靠的代码非常重要。 首先,让我们来了解什么是空指针常量(null pointer constant)...
除了GFlags和VLD,还有其他一些工具也可以辅助进行指针分析和内存管理,比如Valgrind(适用于多种平台)和AddressSanitizer(asan,主要针对GCC和Clang)。这些工具提供了更全面的内存错误检测,包括但不限于野指针...
智能指针可以解决普通指针存在的悬垂指针、野指针、资源泄露等问题本教程的主要的演示平台为Qt 4.11和g++ 7.4。学员也可以使用Visual Studio 2017。教程中从最简单的例子入手,覆盖智能指针的常用技术点,并穿插实例...