矩阵中数组的前两个索引被覆盖

时间:2019-10-30 20:22:05

标签: c

我有一个矩阵结构,定义如下:

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结构上的widthtunnelmap属性以某种方式导致了此问题,但我不知道如何证明这一点。

0 个答案:

没有答案