Форум программистов, компьютерный форум CyberForum.ru

Необработанное исключение - C++

Восстановить пароль Регистрация
 
Anzohan
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 14
22.02.2014, 13:28     Необработанное исключение #1
Здравствуйте. Нужно добавить в готовый класс свои функции из предыдущих работ. Все добавил, но при вызове функции "cdd" вылезает ошибка "Необработанное исключение в "0x00f12afb" в "eta.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfdfdfdfd".". Попробовал запустить старое задание, из которого я взял код и добавил сюда - тоже не работает. Хотя на университетских компьютерах все работало.
Сам код:
Файл CLASS_MATRIX_H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//Создайте класс с именем Matrix.
//Данные класса представлены тремя переменными-членами;
//два члена типа int для хранения размеров матрицы и указатель типа double**.
//Функции_члены:
//Конструктор без параметров:
//Конструктор с параметрами - размерами матрицы;
//Функция вывода матрицы на экран;
//Функция ввода данных в матрицу с клавиатуры;
//Функции вычисления максимального и манимального элементов матрицы;
//Функция вычисления суммы элементов матрицы;
//Функция возвращает количество строк матрицы;
//Функция возвращает количество столбцов матрицы;
//Функция доступа к отдельному элементу матрицы по индексу;
//Функция умножения элементов матрицы на константу;
//Функция умножения двух матриц;
 
#ifndef CLASS_MATRIX_H
#define CLASS_MATRIX_H
#include <iostream>
#include <stdlib.h>
#include <iomanip>
using namespace std;
class Matrix {
 int n, m;
 double ** pMas;
public:
 Matrix();                                //Конструктор
 Matrix(int _n, int _m);                  //Конструктор с параметрами
 Matrix(const Matrix & matr);             //Конструктор копирования
 ~Matrix();                               //Деструктор
 void Get_Matrix() const;                 //Вывод матрицы на экран
 void Set_Matrix();                       //Ввод данных в матрицу с клавиатуры 
 double Sum();                            //Сумма элементов матрицы
 double Max();                            //Максимальный элемент матрицы
 double Min();                            //Минимальный элемент матрицы
 Matrix operator * (double mn);           //Умножение элементов матрицы на число
 double* operator [] (int i);             //Для доступа к эл. массива по индексам
 inline int Get_Row() {return n;}         //Количество строк матрицы
 inline int Get_Col() {return m;}         //Количество столбцов матрицы
 Matrix operator * (const Matrix & matr); //Умножение матриц
 Matrix operator = (const Matrix & matr); //Перегрузка оператора присваивания
void cdr(int u); 
void cdd(int u);
void sdvig();
};
 
#endif //CLASS_MATRIX_H
Файл CLASS_MATRIX.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#include "Class_Matrix.h"
 
//Конструктор
Matrix::Matrix()
{
 n = 0;
 m = 0;
 pMas = NULL;
}
//-------------------
//Конструктор с параметром
Matrix::Matrix(int _n, int _m)
{
 n = _n;
 m = _m;
 int i, j;
 pMas = new double *[n];
 for(i = 0; i < n; i++) pMas[i] = new double [m];
 
 for(i = 0; i < n; i++)
  for(j = 0; j < m; j++)
   pMas[i][j] = 0;
}
//-------------------
//Конструктор копирования
Matrix::Matrix(const Matrix & matr)
{
 n = matr.n;
 m = matr.m;
 int i, j;
 pMas = new double *[n];
 for(i = 0; i < n; i++) pMas[i] = new double [m];
 
 for(i = 0; i < n; i++)
  for(j = 0; j < m; j++)
   pMas[i][j] = matr.pMas[i][j];
}
//-------------------
Matrix::~Matrix()
{
 cout << "Destructor" << endl;
 for(int i = 0; i < n; i++)
  delete []pMas[i];
 delete []pMas;
}
 
//-------------------
void Matrix::Get_Matrix() const
{
 for(int i = 0; i < n; i++)
 {
  for(int j = 0; j < m; j++)
   cout << pMas[i][j] << "  ";
  cout << endl;
 }
 cout << endl;
}
//-------------------
void Matrix::Set_Matrix()
{
 cout << "Elements massiva?:" << endl;
 for (int i = 0; i < n; i++)
  for(int j = 0; j < m; j++)
   cin >> pMas[i][j];
 cout << endl;
}
//-------------------
double Matrix::Sum ()
{
 double s = 0;
 for (int i = 0; i < n; i++)
  for(int j = 0; j < m; j++)
   s += pMas[i][j];
 return s;
}
//-------------------
double Matrix::Max()
{
 double max = pMas[0][0];
 for(int i = 0; i < n; i++)
  for(int j = 0; j < m; j++)
  {
   if (pMas[i][j] > max)
   {
    max = pMas[i][j];
   }
  }
 return max;
}
//-------------------
double Matrix::Min()
{
 double min = pMas[0][0];
 for(int i = 0; i < n; i++)
  for(int j = 0; j < m; j++)
  {
   if (pMas[i][j] < min)
   {
    min = pMas[i][j];
   }
  }
 return min;
}
//---------------------
Matrix Matrix::operator * (double mn)
{
 Matrix c;
 c.n = n;
 c.m = m;
 int i, j;
 c.pMas = new double *[c.n];
 for(i = 0; i < c.n; i++) c.pMas[i] = new double [c.m];
 for(i = 0; i < n; i++)
  for(j = 0; j < m; j++)
  {
   c.pMas[i][j] = pMas[i][j] * mn;
  }
 return c;
}
//---------------------
double* Matrix::operator [] (int i)
{
 if((i < 0) || (i >= n))
 {
  cout << "Go out border" << endl;
  exit(1);
 }
 else
 {
  return pMas[i];
 }
}
//---------------------
Matrix Matrix::operator * (const Matrix & matr)
{
 if(m != matr.n)
 {
  cout << "Multiply Matrix is impossible" << endl;
  exit(1);
 }
 Matrix temp(n, matr.m);
 int i, j, k;
 for(i = 0; i < temp.n; i++)
 {
  for(j = 0; j < temp.m; j++)
  {
   double s = 0;
   for(k = 0; k < m; k++)
   {
    s += pMas[i][k] * matr.pMas[k][j];
   }
   temp.pMas[i][j] = s;
  }
 }
 return temp;
}
//-----------------------
Matrix Matrix::operator = (const Matrix & matr)
{
 int i, j;
 if(pMas)
 {
  for(i = 0; i < n; i++)
   delete []pMas[i];
  delete []pMas;
 }
 n = matr.n;
 m = matr.m;
 pMas = new double *[n];
 for(i = 0; i < n; i++) pMas[i] = new double [m];
 
 for(i = 0; i < n; i++)
  for(j = 0; j < m; j++)
   pMas[i][j] = matr.pMas[i][j];
 return *this;
}
 
void Matrix::sdvig() {
    int u;
    cout<<"Vvedite na skolko budet osushestvlatsa sdvig "<<endl;
    cin>>u;
    char z;
    cout<<"Vvedite kuda budet osushestvlatsa sdvig (r or d)"<<endl;
    cin>>z;
    if (z=='r') {
         cdr(u);
    } else if (z=='d') {
        cdd(u);
    }
}
 
 
void Matrix::cdr(int u) {
    int tmp;
        if (u==0) {
            return;
        }
    for (int k=0;k<u;k++)
for (int i=0;i<n; i++)
for (int j=0;j<m;j++){
tmp=pMas[i][j];
pMas[i][j]=pMas[i][0];
pMas[i][0]=tmp;
}   
    for (int i=0;i<n;i++) {
        for (int j=0;j<m;j++)
cout<<setw(4)<<pMas[i][j]<<"  ";
cout<<endl;
    }
}
 
void Matrix::cdd(int u) {
    int tmp;
        if (u==0) {
            return;
        }
    for (int k=0;k<u;k++)
for (int i=0;i<n; i++)
for (int j=0;j<m;j++){
tmp=pMas[j][i];
pMas[j][i]=pMas[0][i];
pMas[0][i]=tmp;
}   
    for (int i=0;i<n;i++) {
        for (int j=0;j<m;j++)
cout<<setw(4)<<pMas[i][j]<<"  ";
cout<<endl;
    }
    
}
Файл MainSam4.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "Class_Matrix.h"
 
int main() {
 Matrix a(2, 4);
 a.Set_Matrix();
 a.Get_Matrix();
 a.sdvig();
 cout << "Sum = " << a.Sum() << endl;
 cout << "Max = " << a.Max() << endl;
 cout << "Min = " << a.Min() << endl;
 int i, j;
 for(i = 0 ; i < a.Get_Row(); i++)
 {
  for(j = 0; j < a.Get_Col(); j++)
   cout << a[i][j] << "  ";
  cout << endl;
 }
 cout << endl;
// a[1][2] = 0;
// a.Get_Matrix();
 
 Matrix h(4, 3);
 h.Set_Matrix();
// h = h * 3.0;
 h.Get_Matrix();
 
 Matrix d;
 d = a * h;
 d.Get_Matrix();
 
 Matrix g(d);
 g.Get_Matrix();
 system("pause");
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2014, 13:28     Необработанное исключение
Посмотрите здесь:

Необработанное исключение C++
Необработанное исключение C++
C++ Необработанное исключение
C++ Необработанное исключение
C++ Необработанное исключение
C++ Необработанное исключение
Необработанное исключение C++
C++ Необработанное исключение

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
22.02.2014, 19:29     Необработанное исключение #2

Не по теме:

Ну Вы не в тот раздел написали, Вам надо было создавать тему в разделе: http://www.cyberforum.ru/cpp-beginners/


Но а если по теме то в файле CLASS_MATRIX.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Matrix::cdd(int u) {
    int tmp;
        if (u==0) {
            return;
        }
    for (int k=0;k<u;k++)
for (int i=0;i<n; i++) 
for (int j=0;j<m;j++){
tmp=pMas[j][i];
pMas[j][i]=pMas[0][i];
pMas[0][i]=tmp;
}
либо перепутаны i,j в pMas вариант для исправления:
C++
1
2
pMas[i][j]=pMas[i][0];
pMas[i][0]=tmp;
либо перепутаны в for m и n, тогда исправьте на:
C++
1
2
for (int i=0;i<m; i++) 
for (int j=0;j<n;j++){
А так как есть у Вас противоречит объявлению памяти в конструкторе, вот и ошибка - попытка доступа к защищенной ячейки памяти... Примите лишь один из вариантов исправления (если примите оба будет та же ошибка).

P.S. проверил лишь функции "cdd", в остальных могут те же ошибки быть.
Yandex
Объявления
22.02.2014, 19:29     Необработанное исключение
Ответ Создать тему
Опции темы

Текущее время: 01:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru