将指针设置为 NULL 修复项目

Setting pointer to NULL fixes project

在一个半大型项目中(~5000 多行代码)...

我有一个 class,其中一个字段是指针。指针已声明但未初始化:

Apple *apple;

在 class 的构造函数中,我初始化了指针,如果它是 NULL:

if (apple == NULL) {
    apple = new Apple();
}

在项目代码的更下方,我做了:

apple->color = "red";

该程序在 个月 内运行良好,直到今天它给了我一个 EXC_BAD_ACCESS 错误,因为 apple 指针未明确初始化为 NULL 并以一些垃圾值开始 - 所以 NULL 检查失败,并且取消引用它给出了 EXC_BAD_ACCESS.

所以我的问题是 - 该程序如何在 个月 期间正常运行?指针设置为 NULL 之前是否纯属运气?

注:我这里的代码没有改动,只改动了项目中其他地方没有涉及到的this/seem无关紧要。

很难断言,但可能是的,程序运行完全靠运气。

如果您没有显式初始化一个指针,您就不能对它做任何假设,而且 TBH,程序开始崩溃并不奇怪,但它一直运行到现在。

  1. 在构造函数中,您无需检查变量的“先前”状态,只需无条件地将其设置为您需要的状态即可。

  2. 您确定要指向 Apple 而不是该对象本身的指针吗?如果您的 class

    苹果苹果;

它将为您默认构建,您不需要显式delete它(您可能会忘记,泄漏内存)。