2D массив используется неинициализированным в этой функции - PullRequest
0 голосов
/ 31 октября 2019

Я получаю предупреждение:

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 голосов
/ 31 октября 2019

Вы без необходимости передали неинициализированный указатель и использовали его в качестве локальной переменной. Если вы удалите это и используете истинную локальную переменную, например:

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;
}

, тогда предупреждение должно исчезнуть.

В сторону: я также удалил ненужные приведения.

...