Постоянно сталкиваюсь с одними и теми же исключениями
Помогите все время сталкиваюсь с этим исключением Вызвано исключение по адресу 0x00A67B48 в Project1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу Как исправить?
#include <iostream>
using namespace std;
class Matr;
class Vect {
private:int a, * v;
public:
Vect() {}
Vect(int c) {
a = c;
v = new int[a];
}
Vect(const Vect& r) {
a = r.a;
v = new int[a];
for (int i = 0; i < a; i++) {
v[i] = r.v[i];
}
}
void fill() {
for (int i = 0; i < a; i++) {
v[i] = rand() % 10;
}
}
void show() {
for (int i = 0; i < a; i++)
cout << v[i] << " ";
}
friend Vect Multiply(const Vect& w, int t);
friend Vect Multiply(const Matr& g, const Vect& w);
~Vect() { delete[] v; }
};
class Matr {
private: int a, b, ** m;
public: Matr ()
{
}
Matr(int d, int e) {
a = d; b = e;
m = new int* [a];
for (int i = 0; i < a; i++) {
m[i] = new int[b];
}
}
Matr(const Matr& p) {
a = p.a;
b = p.b;
m = new int* [a]; // для новой копии
for (int i = 0; i < a; i++)
m[i] = new int[b];
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
m[i][j] = p.m[i][j];
}
}
}
void fill() {
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
m[i][j] = rand() % 10;
}
}
}
void show() {
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
cout << m[i][j] << "\t";
}
cout << "" << endl;
}
}
friend Matr Multiply(const Matr& g, int t);
friend Vect Multiply(const Matr& g, const Vect& w);
friend Matr Multiply(const Matr& g, const Matr& f);
~Matr() {
for (int i = 0; i < a; i++) {
delete[] m[i];
}
delete[] m;
}
};
int main() {
Matr a(3, 4);
a.fill();
a.show();
cout << "\n" << endl;
Matr c = Multiply(a, 3);
c.show();
Vect b(4);
b.fill();
b.show();
cout << "\n" << endl;
Vect d = Multiply(a, b);
d.show();
cout << "\n" << endl;
Matr t(4, 2);
t.fill();
t.show();
Matr y = Multiply(a, t);
cout << "\n" << endl;
y.show();
}
Matr Multiply (const Matr& g, int t) {
Matr c(g);
for (int i = 0; i < g.a; i++) {
for (int j = 0; j < g.b; j++) {
c.m[i][j] = g.m[i][j] * t;
}
}
return c;
}
Vect Multiply(const Vect& w, int t) {
Vect c(w);
for (int i = 0; i < w.a; i++) {
c.v[i] = w.v[i] * t;
}
return c;
}
Vect Multiply(const Matr& g, const Vect& w) {
Vect f(g.a);
if (g.b!=w.a)
{
cout << "Error" << endl;
return f;
}
else {
for (int j = 0; j < g.a; j++)
{
f.v[j] = 0;
for (int i = 0; i < g.a; i++)
f.v[j] += w.v[i] * g.m[i][j];
}
return f;
}
}
Matr Multiply(const Matr& g, const Matr& f) {
int a = f.a;
int b = g.b;
Matr p(b, a);
if (g.b != f.a) {
return p;
}
for (int i = 0; i < f.a; i++)
{
for (int j = 0; j < g.b; j++)
{
p.m[i][j] = 0;
for (int k = 0; k < g.a; k++)
{
p.m[i][j] += g.m[i][k] * f.m[k][j];
}
}
}
return p;
}
Ответы (1 шт):
Автор решения: user384884
→ Ссылка
Я разобрался в чем ошибка дело в том что создается матрица вот такая Matr p (g.a, f,b) при этом циклы вот такие:
for (int i = 0; i < g.a; i++)
{
for (int j = 0; j < f.b; j++)
{
p.m[i][j] = 0;
for (int k = 0; k < f.a; k++)
{
p.m[i][j] += g.m[i][k] * f.m[k][j];
}
}
}