我有一个矩阵结构,定义如下:
struct tunnelmap {
size_t height;
size_t width;
int** matrix;
};
typedef struct tunnelmap TunnelMap;
以及如下初始化函数:
TunnelMap* createTunnelMap(size_t height, size_t width) {
TunnelMap* pTunnelMap = malloc(sizeof(TunnelMap));
pTunnelMap->height = height;
pTunnelMap->width = width;
pTunnelMap->matrix = malloc(height * sizeof(int));
for (size_t row = 0; row < height; row++) {
pTunnelMap->matrix[row] = malloc(width * sizeof(int));
for (size_t column = 0; column < width; column++) {
pTunnelMap->matrix[row][column] = 1;
}
}
return pTunnelMap;
}
当我初始化一个新矩阵(即tunnelmap
结构)时:
TunnelMap* tm = createTunnelMap(5, 7);
矩阵的第一个“行”的前两个元素似乎是乱码的数据,而矩阵的其余部分似乎是按顺序排列的:
printf("%d\n", tm->matrix[0][0]); // --> -1016700064
printf("%d\n", tm->matrix[0][1]); // --> 22063
printf("%d\n", tm->matrix[0][2]); // --> 1
printf("%d\n", tm->matrix[0][3]); // --> 1
printf("%d\n", tm->matrix[1][0]); // --> 1
printf("%d\n", tm->matrix[2][5]); // --> 1
printf("%d\n", tm->matrix[3][2]); // --> 1
printf("%d\n", tm->matrix[4][6]); // --> 1
我已经正确地遍历了矩阵的各项,以确保确实如此,而且确实如此。每次运行该程序后,[0][0]
单元格和[0][1]
单元格都是看似随机整数,而所有其他单元格均已正确初始化为1。
有人知道我在做什么错吗?我最初的想法是,height
结构上的width
和tunnelmap
属性以某种方式导致了此问题,但我不知道如何证明这一点。