Вызвано исключение по адресу 0x00932311 в Project10.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFDFD

104
10 января 2022, 10:00
#include <stdio.h> 
#include <iostream>
void main() {
    setlocale(LC_ALL, "Russian");
    //создание массива размерностью n
    int n, m, a, b, i;
    printf("Введите кол-во строк первой матрицы n: ");
    scanf_s("%d", &n);
    printf("Введите кол-во столбцов первой матрицы m: ");
    scanf_s("%d", &m);
    printf("Введите кол-во строк второй матрицы a: ");
    scanf_s("%d", &a);
    printf("Введите кол-во столбцов второй матрицы b: ");
    scanf_s("%d", &b);
    if (m <= n && n <= 0 && a <= 0 && b <= 0) {
        printf("Введите положительные значения размерностей для размерности матриц!\n");
        return;
    }
    if (n != a || m != b) {
        printf("Строки и столбцы матриц должны быть равны!\n");
        return;
    }
    int** A;
    int** B;
    int** C;
    A = new int* [n];
    B = new int* [a];
    C = new int* [n];//результирующая матрица
    if (A == NULL || B == NULL || C == NULL)
        printf("Недостаточно памяти!");
    for (int x = 0; x < n; x++) {
        A[x] = new int[m];
        if (A[x] == NULL) {
            printf("Недостаточно памяти!");
            for (int i = 0; i < x; i++)
                delete[] A[i];
            delete[] A;
        }
    }
    for (int x = 0; x < a; x++) {
        B[x] = new int[b];
        if (B[x] == NULL) {
            printf("Недостаточно памяти!");
            for (int i = 0; i < x; i++)
                delete[] B[i];
            for (i = 0; i < n; i++)
                delete[] A[i];
            delete[] A;
            delete[] B;
        }
    }
    for (int x = 0; x < n; x++) {
        C[x] = new int[m];
        if (C[x] == NULL) {
            printf("Недостаточно памяти!");
            for (int i = 0; i < x; i++)
                delete[] C[i];
            for (int i = 0; i < n; i++)
                delete[] A[i];
            delete[] A;
            for (int i = 0; i < a; i++)
                delete[] B[i];
            delete[] B;
            delete[] C;
        }
    }
    printf("Введите матрицу А:");
    for (int x = 0; x < n; x++)
        for (int j = 0; j < m; j++)
            scanf_s("%d", &A[x][j]);
    printf("Введите матрицу B:");
    for (int x = 0; x < a; x++)
        for (int j = 0; j < b; j++)
            scanf_s("%d", &B[x][j]);
    //summa
    for (int x = 0; x < n; x++)
        for (int j = 0; j < b; j++) {
            int s = 0;
            for (int r = 0; r < m; r++)
                s = s + A[x][r] + B[r][j];
            C[x][j]=s;
        }
    printf("Результирующая матрица:");
    for (int x = 0; x < n; x++) {
        for (int j = 0; j < b; j++)
            printf("%d\b", C[x][j]);
    printf("\n");
    }
    for (int x = 0; x < n; x++)
        delete[] A[x];
    for (int x = 0; x < m; x++)
        delete[] B[x];
    for (int x = 0; x < n; x++)
        delete[] C[x];
    delete[] A;
    delete[] B;
    delete[] C;
    system("pause");
}
Answer 1

В цикле

for (int r = 0; r < m; r++) 
  s = s + A[x][r] + B[r][j];

содержится доступ к B[r][j] для r в диапазоне [0, m). Но матрица B имеет размер [a][b]. Если a меньше, чем m, то вы получите вылет за пределы массива со всеми вытекающими последствиями.

Проверки на это у вас в коде нет. Вы требуете равенства n == a и m == b, но никаких ограничений на относительные величины m и a не накладываете.

P.S. int main(), а не void main().

READ ALSO
Выбор зарезервированного порта

Выбор зарезервированного порта

Подскажите, какой, по вашему мнению, можно выбрать порт для планируемой системы автоматического православного IT-исповеданияСуть разработки...

95
Как Можно перегрузить Оператор ==, если необходимо проверить указатель на nullptr

Как Можно перегрузить Оператор ==, если необходимо проверить указатель на nullptr

Допустим в Классе есть указатель, тогда каким образом можно его проверить на nullptrПри попытке использовать простой if( a == nullptr) выдаёт ошибку...

89
c++ подключение файлов

c++ подключение файлов

Как подключить файл если его название записано в переменной?

87
Кто поможет с написанием программы? [закрыт]

Кто поможет с написанием программы? [закрыт]

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение

227