2011-05-03 47 views
0

我在漫长的一天结束时写了这个代码:追赶EXC_BAD_ACCESS

MyObject *thisObj; 
// ... lots of code here ... 
thisObj.name = @"test"; // Which caused an EXC_BAD_ACCESS as I hadn't alloc/init'd thisObj. 

我花了好长时间才弄清楚我忘了初始化,所以我想知道的对象 - 有醒目的任何方式这个。我试图设置NSZombie,但似乎没有做任何事情。

有关最佳方式的任何想法?

+0

EXC_BAD_ACCESS实际上是某种错误的集合。所以这取决于你是否可以很容易地捕捉它(根本)的特定情况。例如,NSZombieEnabled不适用于任何情况。 – elslooo 2011-05-03 18:08:36

+3

NSZombie告诉你是否发送消息给保留计数为0的对象。它不能帮助你处理未初始化的变量。 – 2011-05-03 18:09:51

回答

5

永远不要声明一个变量,而无需将它初始化为某个值。即使

MyObject *thisObj = nil; 

是优于

MyObject *thisObj; 

有可能是一个编译器标志,你可以打开要提醒你这一点。

编辑:

是的,你可以使用-wuninitialized -O(大写的O,不是0)得到这个:

enter image description here

+0

戴夫 - 谢谢。如果我在另一漫长的一天结束时犯了类似的错误,我肯定编译器标志会非常方便! – Snowcrash 2011-05-03 21:13:25