将指针设置为 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,程序开始崩溃并不奇怪,但它一直运行到现在。
在构造函数中,您无需检查变量的“先前”状态,只需无条件地将其设置为您需要的状态即可。
您确定要指向 Apple
而不是该对象本身的指针吗?如果您的 class
苹果苹果;
它将为您默认构建,您不需要显式delete
它(您可能会忘记,泄漏内存)。
在一个半大型项目中(~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,程序开始崩溃并不奇怪,但它一直运行到现在。
在构造函数中,您无需检查变量的“先前”状态,只需无条件地将其设置为您需要的状态即可。
您确定要指向
Apple
而不是该对象本身的指针吗?如果您的 class苹果苹果;
它将为您默认构建,您不需要显式delete
它(您可能会忘记,泄漏内存)。