2016-06-19 2 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

Richard Critten의 의견 (seleznev anton의 답변과 같은)은 귀하가 요청한 특정 문제에 대해 설명합니다. 또한, int 나선 [n] [n];은 C++에서 유효하지 않은 VLA를 선언합니다. 아마 컴파일러가 확장 기능을 지원합니다. – Peter

답변

0

루프에 오류가있는 것으로 보입니다. J 변수가 변경되지 않기 때문에이 무한 루프로

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

보인다. 또한 프로그램의 변수 i는

spiral[i][j]=number; 

에서 n보다 크거나 같을 수 있습니다.