2014-12-17 5 views
0

행렬을 가져 오는 함수를 실행하려고 시도하고 시계열로 90도 회전합니다. 함수의 첫 번째 'for'에서 어떤 이유로 'b'는 2 값에 도달 한 후 1을 더하고 그 후에는 잘 작동하지만 행렬이 너무 커서 그 오류가 발생합니다. 왜 추가 ++를하는지 이해할 수 없습니다.런타임 검사 실패 # 2 - 변수 'tempMatrix'주위의 스택이 손상되었습니다.

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#define ROTATE_MATRIX_SIZE 5 

void RotateMatrix90(int matrix[][ROTATE_MATRIX_SIZE]); 

int main() 
{ 
    int i, j; 
    int matrix[ROTATE_MATRIX_SIZE][ROTATE_MATRIX_SIZE] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }; 

    RotateMatrix90(matrix); 

    for (i = 0; i < ROTATE_MATRIX_SIZE; i++) 
    { 
     for (j = 0; j < ROTATE_MATRIX_SIZE; j++) 
     { 
      if (matrix[i][j] < 10) 
       printf(" "); 
      printf("%d ", matrix[i][j]); 
     } 
     printf("\n"); 
    } 

    getch(); 
    return 0; 
} 

void RotateMatrix90(int matrix[][ROTATE_MATRIX_SIZE]) 
{ 
    int i, j, a, b, tempMatrix[ROTATE_MATRIX_SIZE][ROTATE_MATRIX_SIZE]; 
    for (i = 0, a = ROTATE_MATRIX_SIZE; i < ROTATE_MATRIX_SIZE; i++, a--) 
    { 
     for (j = 0, b = 0; j < ROTATE_MATRIX_SIZE; j++, b++) 
      tempMatrix[a][b] = matrix[i][j]; 
    } 
    for (i = 0; i < ROTATE_MATRIX_SIZE; i++) 
    { 
     for (j = 0; j < ROTATE_MATRIX_SIZE; j++) 
      matrix[i][j] = tempMatrix[i][j]; 
    } 
} 
+0

이 파일은 완벽하게 컴파일되지 않습니다. 그것은 당신의 첫 번째 고려되어야합니다 – user3629249

답변

2

나는이 줄 문제가 생각 :

for (i = 0, a = ROTATE_MATRIX_SIZE; i < ROTATE_MATRIX_SIZE; i++, a--) 

이 시도 :

for (i = 0, a = ROTATE_MATRIX_SIZE - 1; i < ROTATE_MATRIX_SIZE; i++, a--) 

a = ROTATE_MATRIX_SIZEtempMatrix[a][b] 액세스 권한을가 따라서 오류에 액세스 할 수 없습니다 위치를하고있다 만들기.