2016-06-19 7 views
-1

不正なアクセスエラーを修正できますか? は、ここでは、コードです:不正アクセスC++エラー

#include <iostream> 
using namespace std; 
int main() { 
    int t,tr=0; 
    cin>>t; 

while (tr<t) { 
    int n; 
    cin>>n; 
    int distance=n; 
    int number; 
    number=n*n; 
    int spiral[n][n]; 
    for (int i=0;i<n;i++) { 
     for (int j=0; j<n; j++) { 
      spiral[i][j]=0; 
     } 
    } 
    for (int i=0; i<n;) { 
     for (int j=0; j<n;) { 
      spiral[i][j]=number; 
      number=number-1; 
      //cout<<"ij"<<endl; 
      for (int k=0; k<distance; k++) { 
       i++; 
       spiral[i][j]=number; 
       number--; 
       //cout<<"k"<<endl; 
      } 
     } 
    } 
    for (int i=0; i<n; i++) { 
     for (int j=0; j<n; j++) { 
      cout<<spiral[i][j]; 
     } 
     cout<<endl; 
    } 
    tr++; 
} 

return 0; 
} 

不正アクセスはここ

spiral[i][j]=number; 

にある問題のためのリンクですが、これは現時点では重要ではありません。私はnszmobiesを試しましたが、うまく動作しませんでしたので、私はあなたに尋ねています。 これはC++です。 Here is the problem

+0

デバッガでプログラムを実行し、その行の 'i'と' j'の値をチェックします。 –

+2

上記の行(悪いアクセス)では 'i ++;'ここで 'i'はネストされたループの両方でインクリメントされ、決してリセットされません(ループ内で)'> = n'になります。 –

+0

リチャード・クリステンのコメント(seleznev antonの答えのような)はあなたが尋ねた特定の問題について説明しています。さらに、 'int spiral [n] [n];'はVLAを宣言しますが、これはC++では無効です。あなたのコンパイラはおそらくそれを拡張としてサポートしています。 – Peter

答えて

0

ループにエラーがあるようです。 j変数が変更されていないので、それは無限であるよう ループ

for (int j=0; j<n;) 

が見えます。さらに、変数iは、プログラム内の

spiral[i][j]=number; 

で、n以上にすることができます。

関連する問題