为什么此代码在 c 中失败?
Why is this code failing in c?
我正在尝试循环二维数组,但出于某种原因,声明:
var = matrix[i + 1][j] // Fails for i = 1 and j = 0
但是
next = i + 1; var = matrix[next][j] // Works, why???..
我认为它应该可行,因为如果我等于 1,然后我加 1,它就是 2,而且我知道该值不为空,至少在我的情况下,哦有一件事要提到的是我正在测试以下输入:>4 4 1,表示旋转 1 次的 4x4 矩阵,所以我确信矩阵 [2][0] 不为空,我可以打印它并访问它和所有内容。
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
void rotateMatrix(int** matrix, int top, int right, int left, int bottom)
{
//int rows = right;
//int columns = bottom;
int rowScan = 0;
int columnScan = 0;
int high = 0;
int low = 0;
int test = matrix[2][0];
for (int i = 0; rowScan != 1;)
{
for (int j = 0; columnScan != 1;)
{
//int next = i + 1;
high = matrix[i + 1][j]; //FAILS HERE WHEN
matrix[i + 1][j] = low != 0 ? low : matrix[i][j];
i++;
if (i >= bottom)
{
bottom--;
break;
}
if ((i + 1) < bottom)
{
low = matrix[i + 1][j];
matrix[i + 1] = high;
}
if ((i + 1) == bottom)
{
columnScan = 1;
rowScan = 1;
}
}
}
}
int main()
{
//-- Declaring variables
int rows, columns, rotations;
//-- Initializing variables
rows = 0;
columns = 0;
rotations = 0;
//-- Scanning parameters and adding them to the stdin buffer
scanf("%d %d %d", &rows, &columns, &rotations);
//-- Initializing 2D array to save the Matrix values allocating space in memory
int **matrix = (int**)malloc(rows * sizeof(int*));
//-- Initializing each allocated pointer to each column size
for (int i = 0; i < rows;i++)
matrix[i] = malloc(columns * sizeof(int));
//-- Scanning Matrix values and saving them into stdin buffer
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns; j++)
matrix[i][j] = rand() % 10;
// scanf("%d", &matrix[i][j]);
//-- Rotating R times
while ((rotations--) != 0)
rotateMatrix(matrix, 0, columns, 0, rows);
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
printf("%d", matrix[i][j]);
}
printf("\n");
}
getchar();
getchar();
return 0;
}
matrix[i + 1] = high;
这一行是问题,我遗漏了 [j],visual studio 没有抛出异常,这就是为什么我无法知道发生了什么,但使用 GCC 编译器并检查警告帮助我找出我做错了什么,谢谢!
我正在尝试循环二维数组,但出于某种原因,声明:
var = matrix[i + 1][j] // Fails for i = 1 and j = 0
但是
next = i + 1; var = matrix[next][j] // Works, why???..
我认为它应该可行,因为如果我等于 1,然后我加 1,它就是 2,而且我知道该值不为空,至少在我的情况下,哦有一件事要提到的是我正在测试以下输入:>4 4 1,表示旋转 1 次的 4x4 矩阵,所以我确信矩阵 [2][0] 不为空,我可以打印它并访问它和所有内容。
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
void rotateMatrix(int** matrix, int top, int right, int left, int bottom)
{
//int rows = right;
//int columns = bottom;
int rowScan = 0;
int columnScan = 0;
int high = 0;
int low = 0;
int test = matrix[2][0];
for (int i = 0; rowScan != 1;)
{
for (int j = 0; columnScan != 1;)
{
//int next = i + 1;
high = matrix[i + 1][j]; //FAILS HERE WHEN
matrix[i + 1][j] = low != 0 ? low : matrix[i][j];
i++;
if (i >= bottom)
{
bottom--;
break;
}
if ((i + 1) < bottom)
{
low = matrix[i + 1][j];
matrix[i + 1] = high;
}
if ((i + 1) == bottom)
{
columnScan = 1;
rowScan = 1;
}
}
}
}
int main()
{
//-- Declaring variables
int rows, columns, rotations;
//-- Initializing variables
rows = 0;
columns = 0;
rotations = 0;
//-- Scanning parameters and adding them to the stdin buffer
scanf("%d %d %d", &rows, &columns, &rotations);
//-- Initializing 2D array to save the Matrix values allocating space in memory
int **matrix = (int**)malloc(rows * sizeof(int*));
//-- Initializing each allocated pointer to each column size
for (int i = 0; i < rows;i++)
matrix[i] = malloc(columns * sizeof(int));
//-- Scanning Matrix values and saving them into stdin buffer
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns; j++)
matrix[i][j] = rand() % 10;
// scanf("%d", &matrix[i][j]);
//-- Rotating R times
while ((rotations--) != 0)
rotateMatrix(matrix, 0, columns, 0, rows);
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
printf("%d", matrix[i][j]);
}
printf("\n");
}
getchar();
getchar();
return 0;
}
matrix[i + 1] = high;
这一行是问题,我遗漏了 [j],visual studio 没有抛出异常,这就是为什么我无法知道发生了什么,但使用 GCC 编译器并检查警告帮助我找出我做错了什么,谢谢!