умножение матрицы А на матрицу В

при вводе отрицательных элементов матрицы программа выдаёт ошибку. В чем проблема?

#include <iostream>
#include <iomanip>

using namespace std;

int main() {
    
    int** A, n, m, q;
    cout << "Enter cols count in matrix A and rows count in matrix B: "; //столбцы матрицы А и строки матрицы В
    cin >> n;
    cout << "Enter rows count in matrix A: "; //строки матрицы А
    cin >> m;
    cout << "Enter cols count in matrix B: "; //столбцы матрицы В
    cin >> q;
        
    A = (int**)malloc(sizeof(int*) * m);
    for (int i = 0; i < n; ++i)
        A[i] = (int*)malloc(n * sizeof(int));

    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            cin >> A[i][j];
        }
    }


    int** B;
    B = (int**)malloc(sizeof(int*) * n);
    for (int i = 0; i < q; ++i)
        B[i] = (int*)malloc(q * sizeof(int));

    cout << "enter the matrix B: ";
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < q; ++j) {
            cin >> B[i][j];
        }
    }


    int** C;
    C = (int**)malloc(sizeof(int*) * m);
    for (int i = 0; i < q; ++i)
        C[i] = (int*)malloc(q * sizeof(int));



    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < q; ++j) {
            for (int k = 0; k < n; ++k) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }

    cout << "\nMatrix A: " << endl;
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            cout << setw(5) << A[i][j] << " ";
        }
        cout << endl;
    }

    cout << "\nMatrix B: " << endl;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < q; ++j) {
            cout << setw(5) << B[i][j] << " ";
        }
        cout << endl;
    }

    cout << "\nMatrix C: " << endl;
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < q; ++j) {
            cout << setw(5) << C[i][j] << " ";
        }
        cout << endl;
    }


    for (int i = 0; i < m; ++i)
        free(A[i]);
    free(A);

    for (int i = 0; i < n; ++i)
        free(B[i]);
    free(B);
    
    for (int i = 0; i < m; ++i)
        free(C[i]);
    free(C);
    

    return 0;
}

вот ошибка, которая возникает

введите сюда описание изображения


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

Автор решения: Harry

У вас вот такой код:

B = (int**)malloc(sizeof(int*) * n);
for (int i = 0; i < q; ++i)
    B[i] = (int*)malloc(q * sizeof(int));

Т.е. вы выделили в B место для n указателей, но присваиваете q из них. И если q больше n, то вы просто вылетаете за границы выделенной памяти.

Будьте внимательнее!

→ Ссылка