2013-05-02 44 views
0

我在xcode中使用原始数组类型。例如:Imnitializing原始数组 - 破坏其他数组

int matrix [10][10]; 

我也使用一个简单的循环来初始化所述阵列

for(int x=0;x<=10;x++) 
    for(int y=0;y<=1;0y++) 
    matrix[x][y] = 0; 

我整个代码初始化sevreal矩阵以这种方式。有时在初始化执行后我注意到,一个刚刚初始化或更新的数组现在包含垃圾。有没有简单的方法来初始化这种类型的数组。和/或为什么这似乎损坏其他阵列。

回答

0

INT myArray的[10] [10] = {};

这将创建数组并初始化所有匹配项为0;

1

您的阵列在两个维度上都有10个位置,但是您的循环上升到了11个。

尝试

for(int x = 0; x < 10; x++) 
    for(int y = 0; y < 10; y++) 
    matrix[x][y] = 0; 

通知使用较小比比较器,而不是比较小或等于的。

+1

对不起。我上面提供的例子仅仅是一个推动观点的例子,我看到了我的错误,但它并不涉及矩阵值中的“垃圾”。 – 2013-05-02 14:13:30

+0

您应该更新您的问题以显示您遇到问题的实际代码。 – 2013-05-02 22:05:20

0

我想你并没有为不同的矩阵声明不同的变量,而是错误地覆盖它们。

+1

谢谢。矩阵是独一无二的。我检查了输出。如果我被覆盖,不同的矩阵将包含相同值的sonme。 – 2013-05-02 14:12:00

0

尝试...

matrix=[[NSArray alloc]init]; 
+0

我会试一试! – 2013-05-02 14:14:10

+0

我收到一个错误,说'数组类型'int [10] [10]不可赋值 – 2013-05-02 18:30:34

0

像你所看到的最可能的腐败原因(假设你没有犯@Renan注意到的错误)是你期望堆栈指针在其作用域之外存在。你不能,例如,return matrix给调用者,因为它创建的堆栈帧将消失。

此外,由于您在堆栈中分配,您需要小心矩阵大小。如果它变得太大,那么你会得到堆栈损坏。 100个整数一般是罚款,如果你不深递归,但要记住的stack limits

  • OS X主线:8MB
  • iOS的主线程:1MB
  • 所有辅助线程:512kB的

这是整个堆栈(所有帧,而不仅仅是当前帧)。