2012-03-05 10 views
0

私はVS2010コンソールアプリケーションで2D配列を扱っています。 多次元配列の割り当てVSC++

Thing::Thing(int _n, bool _control){ 
    m = _n; 
    control = _control; 
    thisArray = new int*[m]; 
    for(int ii = 0; ii < m; ii++){ 
     thisArray[ii] = new int[m]; 
     for (int jj = 0; jj < m; jj++){ 
      thisArray[ii][jj] = 0; 
     } 
    } 
    if (control == true){ 
     int num = 1; 
     for (int jj = 0; jj < m; jj++){ 
      for (int ii = 0; ii<m; ii++){ 
       if ((jj == (m-1)) && (ii == (m-1))){ 
        std::cout << "inserting " << 0 << 
         "at[" << ii << "][" << jj << "]" << std::endl; 
        thisArray[ii][jj] = 0; 
        std::cout << thisArray[ii][jj] << std::endl; 
       } else{ 
        std::cout << "inserting " << num << 
         "at[" << ii << "][" << jj << "]" << std::endl; 
        thisArray[ii][jj] = num++; 
        std::cout << thisArray[ii][jj] << std::endl; 
       } 
      } 
     } 
     pi.x = m-1; 
     pi.y = m-1; 
    } 
} 

が、私は

void Thing::display(){ 
    int x = 0; 
    int y = 0; 
    for(; y < m; y++){ 
     for(x = 0; x < m; x++){ 
      if (Point(x, y) == pi){ 
       std::cout << "[ ]"; 
      } 
      std::cout << "[" << thisArray[x][y] << "]"; 
      if (x == m){ 
       std::cout << std::endl; 
      } 
     } 
    } 
} 

を通してそれを表示しようとするが、私は4に渡すときにのみ出力として最初の次元が表示されているように思える、と真:私は、次のような配列を割り当てています次のようになります。

inserting 1 at[0][0]1 
inserting 2 at[1][0]2 
inserting 3 at[2][0]3 
inserting 4 at[3][0]4 
inserting 5 at[0][1]5 
inserting 6 at[1][1]6 
inserting 7 at[2][1]7 
inserting 8 at[3][1]8 
inserting 9 at[0][2]9 
inserting 10 at[1][2]10 
inserting 11 at[2][2]11 
inserting 12 at[3][2]12 
inserting 13 at[0][3]13 
inserting 14 at[1][3]14 
inserting 15 at[2][3]15 
inserting 0 at[3][3] 0 
[1][2][3][4] 

、と私は私の監視リストに配列を追加すると、システムが要素の全てを単一の値へのポインタへのポインタを示し、その後、私だけ最初の要素が表示されます、そしてありませんs。

実行時アクセスエラーなどは発生しませんが、配列を表示しようとすると最初の行だけが表示されます。注:私はintの実際の2次元配列を使用するように求められており、あらかじめ書き込まれたライブラリや1次元の嘘を使用することはできません。

編集:追加出力情報を追加しました。 EDIT2(解決)は:ディスプレイにループの外部の保持値は、それらが円形の反復のためにリセットされることを保証するとき

for (x = 0; x < m; x++) 

あるとforループ秒を変更しました。

+0

それを考えるようになった。これはdisplay()メソッドのロジックエラーであるかもしれませんが、なぜそれが時計の最初の要素のみを表示するのかはまだ分かりません。 – gardian06

答えて

2

ディスプレイ機能では、外側のyループの各繰り返しでxをリセットする必要があります。

for(int y = 0; ; y < m; y++){ 
    for(int x = 0; ; x < m; x++){ 

およびVisual C++デバッガで配列としてポインタを表示するために、あなたはthat other questionで見ることができます: それも、あなたがforステートメント内の初期化を行った場合、明確になります。

+0

私はそれらを分けて、私は位置を制御するためにPointを使うことができたので、2番目のforループを(x = 0; x gardian06

関連する問題