2013-05-02 55 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的

這是整個堆棧(所有幀,而不僅僅是當前幀)。