Ошибка проверки времени выполнения №2 - стек вокруг переменной tempMatrix поврежден
Я пытался запустить функцию, которая получает матрицу, и повернуть ее на 90 градусов по часовой стрелке. По какой-то причине в первом "for" в функции "b" добавляет 1 после достижения значения 2, после этого работает нормально, но затем матрица становится слишком большой и получает эту ошибку. Не могу понять, почему это делает дополнительный ++.
#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];
}
}
1 ответ
Решение
Я считаю, что эта линия является проблематичной:
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_SIZE
делает tempMatrix[a][b]
доступ к местоположению, к которому у вас нет прав доступа, следовательно, ошибка.