2010-04-16 38 views
0

我在写一个计算Jacobi算法的程序。它是用Objective-C编写的,因为它在Mac上运行,但大部分是用标准C编写的。我使用了一个二维C数组和一个包含5个标签的NSArrayNSString stringWithFormat:与C数组?

下面的代码产生一个错误EXC_BAD_ACCESS

​​

任何帮助吗?

编辑

这里就是我initresultLabels

resultLabels = [[NSArray alloc] initWithObjects:result11, result22, result33, result44, result55, nil]; 
+0

你确定在'martix [i] [i]'的所有可能值都是非'nil'值? – 2010-04-16 17:22:23

+0

是的,所有东西都被声明为一个int [0到9]。 – 2010-04-16 17:23:03

+0

我认为你误解了Squeegy的问题(​​以及Don和paull的问题):将['resultLabels objectAtIndex:i] setStringValue:resultString]行分割成多行并检查每个对象的nil值:'NSArray * labels = resultLabels; id object = [labels objectAtIndex:i]; NSTextField * textField =(NSTextField *)对象; [textField setStringValue:resultString];' – 2010-04-16 17:30:09

回答

1

最有可能的是,您正在引用已发布的对象。你的NSArray或objectAtIndex:在那一点上是否为零?你能显示你实例化这些对象的行吗?

+0

向nil发送消息不会导致BAD_ACCESS错误。 – 2010-04-16 17:28:36

+0

paull - true;我的意思是内存地址0x0,而不是零。感谢您指出了这一点。 – Don 2010-04-16 17:47:30

+0

挑剔的细节:零和地址0x0是相同的,都不会导致访问错误;消息到零返回零。 – 2010-04-16 18:08:30

1

如果你在该行的错误,然后要么resultsLabels被释放,或者在i的对象。

+0

我的数组中的对象是一个字符串,而不是您的整数的整数。 – 2010-04-16 18:10:16

+0

对不起,你是对的。一次处理两个项目会让人感到困惑! ;) – 2010-04-16 18:11:56

1

这不是你的失败者的来源,但%g格式的代码是双打而不是整数;你想%d。

数组中的项目将被数组自动保留(Foundation集合中的对象始终由集合保留),因此您不需要向它们发送额外的-retain消息。所以看起来好像resultLabels可能会在崩溃发生之前的某个地方发布。

+0

其实,我简化了。这真是一个'双',后来改变了。 'init'方法中的'retainCount'是1,但是当它以不同的方法调用时,它会崩溃。我认为如果一个消息被发送到一个“无”对象,就没有任何反应,这就是为什么这是如此令人费解。 – 2010-04-16 18:36:02

+0

什么都不会发生,并且您在此问题的其他地方发表的评论显示您的NSArray指向0x4。所以我猜想你有可能以某种方式将你的整数指定给数组指针。 – 2010-04-16 19:33:47

相关问题