在此函数中未初始化使用2D数组

时间:2019-10-31 16:11:18

标签: c function multidimensional-array initialization malloc

我收到警告:

  

matrixResult'在此函数中未初始化[-Wuninitialized]

在此功能中:

int **addMatrices(int **matrixA, int **matrixB, int *rows, int *cols) {
    int **matrixResult = initializeMatrix(matrixResult, rows, cols);
    for (int i = 0; i < *rows; i++)
        for (int j = 0; j < *cols; j++)
            matrixResult[i][j] = matrixA[i][j] + matrixB[i][j];

    return matrixResult;
}

但是它正在这里初始化:

int **initializeMatrix(int **matrix, int *rows, int *cols) {
    matrix = (int **)malloc((*rows) * sizeof(int*));
    checkNullPointer(matrix);
    for(int i = 0; i < *rows; i++) {
        matrix[i] = (int *)calloc(*cols, sizeof(int));
    }

    return matrix;
}

不是吗?我试图找到答案,但是每个人都说2D数组需要分配。但我认为它已包含在我的代码中。任何人都知道这里发生了什么事吗?

1 个答案:

答案 0 :(得分:0)

您不必要地传递了未初始化的指针,并将其用作局部变量。如果删除它并使用真实的局部变量,如下所示:

int **initializeMatrix(int *rows, int *cols) {
    int **matrix = malloc((*rows) * sizeof(int*));
    checkNullPointer(matrix);
    for(int i = 0; i < *rows; i++) {
        matrix[i] = calloc(*cols, sizeof(int));
    }

    return matrix;
}

int **addMatrices(int **matrixA, int **matrixB, int *rows, int *cols) {
    int **matrixResult = initializeMatrix(rows, cols);
    for (int i = 0; i < *rows; i++)
        for (int j = 0; j < *cols; j++)
            matrixResult[i][j] = matrixA[i][j] + matrixB[i][j];

    return matrixResult;
}

然后警告应该消失。

此外:我还删除了不必要的演员表。