При выделении памяти malloc появляется исключение

Делал функцию, которая считает определитель матрицы. По заданию нужно разделить код на 2 файла, в первом находится функция int main() и библиотеки, а во втором функции вычисления определителя и минора. При первом выделении памяти для матрицы nMatrix появляется исключение. Ошибка: Вызвано исключение по адресу 0x00007FF6E70B60AA в sam9lab.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xFFFFFFFF8C0ED780.

Код:


#include <stdio.h>
#include <stdlib.h>

void getMatrix(int** matrix, int** newMatrix, int row, int col, int size) {

    int offsetRow = 0;
    int offsetCol = 0;
    for (int i = 0; i < size - 1; i++) {
        if (i == row) {
            offsetRow = 1;
        }

        offsetCol = 0;
        for (int j = 0; j < size - 1; j++) {
            if (j == col) {
                offsetCol = 1;
            }

            newMatrix[i][j] = matrix[i + offsetRow][j + offsetCol];
        }
    }
}

int matrixdet(int **matrix, int size) {

    int ind = 1;
    int det = 0;

    if (size == 1) {
        det = matrix[0][0];
    }
    else if (size == 2) {
        det = (matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0]);
    }
    else {

        int** nMatrix = (int**) malloc((size - 1) * sizeof(int*));
        for (int l = 0; l < size - 1; l++) {
            nMatrix[l] = (int*) malloc((size - 1) * sizeof(int)); //здесь появляется исключение
        }

        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {

                getMatrix(matrix, nMatrix, i, j, size);
                det = det + ind * matrix[j][j] * matrixdet(nMatrix, size - 1);
                printf("%d", det);

                ind = -ind;
            }
        }

        for (int k = 0; k < size - 1; k++) {
            free(nMatrix[k]);
        }
        free(nMatrix);
    }

    return det;
}

int main() {

    int size;

    printf("size of matrix: ");
    scanf("%d", &size);

    int** A = (int**) malloc(size * sizeof(int*));
    for (int i = 0; i < size; i++) {
        A[i] = (int*) malloc(size * sizeof(int));
    }

    printf("Enter elements of the matrix A:\n");
    for (int y = 0; y < size; y++) {
        for (int o = 0; o < size; o++) {
            scanf("%d", &A[y][o]);
        }
    }

    int det = matrixdet(A, size);

    printf("Detrminant: %d", det);

    for (int i = 0; i < size; i++) {
        free(A[i]);
    }
    free(A);

    return 0;
}



Ответы (0 шт):