首页 > 解决方案 > 在 C 中分配一个二维整数数组

问题描述

我正在尝试在 C 中动态分配一个 2D INT 数组以返回一个转置矩阵,我已经对该主题进行了多项研究,它应该以这种方式工作,但是我一直在努力使用该程序。

我现在尝试了很多不同的方法(偏移量,指针算法),我没有找到解决问题的方法。

我要么得到垃圾值,要么程序崩溃(没有段错误,错误代码崩溃)。

我也在寻找一个合适的版本来分配内存,我在stackoverflow上看到了几个版本,我更喜欢使用的版本是分配指针空间和之后的整数空间(我正在尝试使用的那个)在下面的示例中)。

   // Convert a matrix to it's transposed version. Returns a two dimensional array (pointer)
int **getTransposedMatrix(int *matrix, int dimension_h, int dimension_w){
    int **transposedMatrix = (int **) malloc(dimension_w * sizeof(int*));

    for(int row=0; row<dimension_w; row++){
        transposedMatrix[row] = (int*) malloc(dimension_w * sizeof(int));
    }

    for(int row=0; row<dimension_h; row++){
        for(int column=0; column<dimension_w; column++){
            transposedMatrix[column][row] = *(matrix + row * dimension_w + column);
         printf("%d ", transposedMatrix + (row * dimension_w + column));
        }
        printf("\n");
    }
    return **transposedMatrix;
}

我很感激任何帮助:)

标签: cmemory

解决方案


我不会打扰“二维数组”,例如您正在设置的那个,您在其中分别分配行。下面是我的版本,它使用单个数组并相应地计算其中的偏移量。

int *getTransposedMatrix(int *matrix, int dimension_w, int dimension_h)
{
    int *transposed = malloc(dimension_w * dimension_h * sizeof(int));
    for (int row = 0; row < dimension_h; row++) {
        for (int col = 0; col < dimension_w; col++) {
            transposed[col * dimension_h + row] = matrix[row * dimension_w + col];
        }
    }
    return transposed;
}

ideone 有一些测试示例


推荐阅读