c - 为什么指向 NULL 的 init 指针是一个好习惯?

标签 c

如果您不想(或不能)使用地址初始化指针,我经常听到人们说您应该使用 NULL 来初始化它这是一个很好的做法。

你可以发现人们在SO中也说了类似的话,例如here .

在许多 C 项目中工作,我认为这是一个好的实践,或者至少在某种程度上比不使用任何东西初始化指针更好。

我最大的原因之一是:用 NULL 初始化一个指针增加空指针取消引用的机会,这可能会导致整个软件崩溃,这很糟糕。

那么,如果你说这是一个很好的实践,或者人们只是说这是理所当然的(就像你应该总是初始化一个变量一样),你能告诉我原因是什么吗?

请注意,我尝试在 Misra 2004 中查找,但也没有找到任何相关规则或建议。

更新:

所以大多数评论和答案给出的主要原因是指针在使用之前可能有一个随机地址,因此最好将其设置为 null,这样您可以更快地找出问题。

为了让我的观点更清楚,我认为从实际的角度来看,现在的商业 C 软件没有任何意义。大多数静态分析器都会正确检测到所使用的未分配指针,这就是为什么我更喜欢让它成为非初始化,因为如果我用 NULL 初始化它,那么当开发人员忘记将它分配给“真实”地址时,它通过了静态分析器,并且会导致空指针的运行时问题。

最佳答案

你说

One of my biggest reason is: init a pointer with NULL increase the chance of null pointer derefence which may crash the whole software, and it's terrible.

我认为主要原因实际上正是由于这个。如果你不初始化指向 NULL 的指针,那么如果出现取消引用错误,那么找到问题就会变得更加困难,因为指针不会被设置为 NULL,它很可能是一个垃圾值,可能看起来完全像一个有效的指针。

关于c - 为什么指向 NULL 的 init 指针是一个好习惯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57436495/

相关文章:

c - 作为指针的参数未正确递增

c++ - 测量计算几何算法的运行时间

c - 垂直/水平翻转二维数组

python - 将 C 对象添加到 Python List 并将 C 对象列表返回给 python

c - 数据复制方法直接分配与c中的memcpy

c - 如何使用 C 中的插入排序为每一行提供有序索引来对文件中的字符串进行排序

c - put() 输出附加 "time"字符串

c - C中主要函数的风格

c++ - 这个函数定义是如何工作的?

c、导入不同行的文本文件并处理行