0

xcodeでプリミティブ配列型を使用しています。例:

int matrix [10][10];

また、単純なループを使用して配列を初期化しています

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

コード全体で、この方法でいくつかの実数行列を初期化します。初期化が実行された後、以前に初期化または更新された配列にガベージが含まれていることに気付きました。この型の配列を初期化する簡単な方法はありますか。または、これが他のアレイを破損しているように見えるのはなぜですか。

4

5 に答える 5

1

配列には両方の次元で 10 の位置がありますが、ループは最大 11 になります。

試す

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

lesser than or equal toではなく、 lesser thanコンパレータを使用していることに注意してください。

于 2013-05-02T14:05:51.203 に答える
0

int myArray[10][10] = {};

これは配列を作成し、すべてのオカレンスを 0 に初期化します。

于 2013-05-02T18:37:34.547 に答える
0

あなたが見ているような破損の最も可能性の高い原因 (@Renan が指摘するエラーを作成していない場合) は、スタック ポインターがそのスコープ外に存在することを期待していることです。たとえば、return matrix呼び出し元に対してはできません。これは、作成されたスタック フレームが消えるためです。

また、スタックに割り当てているため、行列のサイズに注意する必要があります。大きくなりすぎると、スタックが破損します。深く再帰しない場合は通常 100 int で問題ありませんが、スタック制限に注意してください。

  • OS X メインスレッド: 8MB
  • iOS メインスレッド: 1MB
  • すべてのセカンダリ スレッド: 512kB

これがスタック全体です (現在のフレームだけでなく、すべてのフレーム)。

于 2013-05-02T22:10:36.443 に答える
0

それを試してみてください...

matrix=[[NSArray alloc]init];
于 2013-05-02T14:06:53.210 に答える
0

異なる行列に対して異なる変数を宣言しておらず、誤ってそれらを上書きしていると思います。

于 2013-05-02T14:06:24.917 に答える