2010-03-26 62 views
0

嘿,伙计们,我刚刚开始围绕客观的C围绕我的头,并且正在Iphone上做一个小项目。我刚遇到一个奇怪的问题。我不得不在我的程序中处理图像,所以我有很多局部变量声明为temp [width] [height]。如果我不使用NSThread来执行图像处理,它会很好地工作。但是,如果我使用NSThread,每当我尝试访问声明为temp [widht] [height]的2-D数组时,它都会继续给我EXC_BAD_ACCESS。所以我必须从堆中分配内存才能有一个2-D数组。这将解决问题,但我仍然不明白。我的第一个想法是堆栈溢出,但它在一个线程中运行良好。我只是不明白。目标C中的线程和二维数组?

+0

我想我们需要看一个具体的例子。 – AnthonyLambert 2010-03-26 14:18:57

+2

请发布代码。 – 2010-03-26 14:21:06

回答

0

在线程完成数组之前,数组本身的方法可能会终止,因此您的数组超出了作用域,并且内存被占用而被用于其他事情。但是你的线程不知道这一点,并且无论如何都访问内存。

+0

有没有办法处理那种问题?我在多线程技术上是noob ... – user302581 2010-03-26 15:03:11

+1

多线程是非常复杂的,并且还有很多问题需要处理(比赛条件,死锁等) - 您可能需要阅读这些内容。对于这个特定的问题,您应该在堆上分配共享资源,或者最好使用NSArray(无论如何都分配在堆上)的Objective-c对象。 – shosti 2010-03-26 15:34:17

+0

谢谢你们!我发现了这个问题。它是堆叠式的。我创建了一维数组并尝试访问,但仍然不是。然后我把它做得更小,并且工作。我认为通过在添加线程之前调用方法来设置堆栈大小,或者从堆中分配内存将使其工作。默认情况下,不确定为线程分配了多少堆栈内存。 – user302581 2010-03-26 18:30:25