Нарушение прав доступа с++ при занулении элементов массива

Пишу программу по умножению матриц. При компиляции возникает ошибка "Необработанное исключение по адресу 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFFFFFFFFFFFFFF." Отладчик показывает, что ошибка находится в строке, где я присваиваю 0 значение элементам массива С. Буду признателен за вашу помощь!

#include <iostream>
#include <cctype>
#include <conio.h>
#include <cstring>
using namespace std;
int main()
{

setlocale(LC_ALL , "Russian");

int K, L, M, N;
do {
    system("cls");
    cout << "Введите размерность первой матрицы" << endl;
    cin >> K >> L;

    cout << "Введите размерность второй матрицы" << endl;
    cin >> M >> N;

    if (L != M) {
        system("cls");
        cout << "IMPOSSIBLE";
        _getch();
    }

} while (L != M);
int **a = new int*[K];
for (int i(0); i < K; i++) {
    a[i] = new int[L];
}
int **b = new int*[M];
for (int i(0); i < M; i++) {
    b[i] = new int[N];
}

int **c = new int*[K];
for (int i(0); i < K; i++) {
    b[i] = new int[N];
}

cout << "Введите значения первой матрицы" << endl;
for (int i(0); i < K; i++) {
    for (int j(0); j < L; j++) {
        cin >> a[i][j];

    }
}

cout << "Введите значения второй матрицы" << endl;
for (int i(0); i < M; i++) {
    for (int j(0); j < N; j++) {
        cin >> b[i][j];

    }
}

for (int i(0); i < K; i++) {
    for (int j(0); j < N; j++) {
        c[i][j]=0; //место ошибки

    }
}
system("cls");

cout << "результат умножения" << endl;
for (int i(0); i < K; i++) {
    for (int j(0); j < N; j++) {
        for (int k(0); k < L; k++) {
            c[i][j] += a[i][k] * b[k][j];

        }
        cout << c[i][j] << "  ";
    }
    cout << endl;
}

for (int i(0); i < K; i++) 
    delete [] a[i]; 

delete [] a;

for (int i(0); i < M; i++) 
    delete [] b[i];

delete [] b;

for (int i(0); i < K; i++) 
    delete [] c[i];

delete [] c;

return 0;
}

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

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

Не используйте копипаст, сделайте отдельную функцию. Лучше использовать std::vector. Ошибка тут:

int **b = new int*[M];
for (int i(0); i < M; i++) {
    b[i] = new int[N];
}

int **c = new int*[K];
for (int i(0); i < K; i++) {
    b[i] = new int[N];  // <- b вместо c
}
→ Ссылка
Автор решения: Harry

По-моему, типичная ошибка copy-paste:

int **b = new int*[M];
for (int i(0); i < M; i++) {
    b[i] = new int[N];
}

Выше вы выделили память для массива b и его заполняете. А ниже - какой массив вы заполняете, выделив память для массива c? Не тот же b случайно?...

int **c = new int*[K];
for (int i(0); i < K; i++) {
    b[i] = new int[N];
}
→ Ссылка