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

Непонятная для меня ошибка - C++

Восстановить пароль Регистрация
 
 
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
08.04.2013, 22:33     Непонятная для меня ошибка #1
Доброго времени суток. Во время выполнения оператора присваивания вылетает ошибка "Access violation", происходит это в месте обращения к элементу массива переменной input (см. код). Если просто посмотреть что находится в массиве, то там вместо чего-то вразумительного находится "CXX0030: Error: expression cannot be evaluated".
Что это может значить?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class matrix
{
public:
    matrix(int,int);
    ~matrix(void);
    int columns;//кол столбиков
    int rows;//кол строк
    double **mat;//сама матрица
    //double det(void);
    //matrix inverse(void);//нахождение обратной
    matrix transpon(void);
    void transpon_this(void);
    matrix operator=(const matrix &);//оператор присваивания
    matrix operator+(const matrix &);//оператор сложения
    matrix operator-(const matrix &);//оператор вычитания
    matrix operator*(const matrix &);//оператор умножения матриц
    bool operator==(const matrix &);//оператор сравнения
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
matrix matrix::operator=(const matrix &input)
{
    for (int i=0; i<rows;++i)
        delete [] mat[i];
    delete [] mat;
 
    rows=input.rows;
    columns=input.columns;
    mat=new double*[rows]; 
    for (int i=0;i<rows;++i)
        mat[i]=new double[columns];
 
    for (int i=0;i<rows;++i)
        for(int j=0;j<columns;++j)
            mat[i][j]=input.mat[i][j];
    return *this;
}
C++
1
2
3
4
5
6
7
8
9
10
11
matrix matrix::operator+(const matrix & rightmatrix)
{
    if ((rows==rightmatrix.rows)&&(columns==rightmatrix.columns))
    {
        matrix temp(rows,columns);
        for (int i=0;i<rows;++i)
            for (int j=0;j<columns;++j)
                temp.mat[i][j]=mat[i][j]+rightmatrix.mat[i][j];
        return temp;
    } else return(matrix(0,0));
}
И как вообще правильно оформлять такие классы по канонам ООП?(если не сложно пример кода или ссылку на верный путь)

Спасибо всем ответившим!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2013, 22:33     Непонятная для меня ошибка
Посмотрите здесь:

непонятная для меня ошибка прошу объяснить знающих людей C++
непонятная ошибка( C++
Непонятная ошибка C++
C++ Непонятная ошибка
C++ Непонятная ошибка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Xipxop
 Аватар для Xipxop
481 / 9 / 2
Регистрация: 28.12.2011
Сообщений: 150
08.04.2013, 23:02     Непонятная для меня ошибка #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Точно не знаю, но советую вам:
Не использовать в названиях: Переменных, функций, классов знаки: ~/*-+=&^%$#@!.

Попробуйте их заменить, мб поможет...
gas1992
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 13
08.04.2013, 23:06     Непонятная для меня ошибка #3
Есть готовая лаба! со всем правильным размещение файлов! и всеми функциями и перегрузками! если интересно пишите в лс!
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
08.04.2013, 23:12  [ТС]     Непонятная для меня ошибка #4
Xipxop, та вроде нигде,кроме операторов не использовал. Если где-то просто не заметил,то киньте номер строки, пожалуйста.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 01:39     Непонятная для меня ошибка #5
Цитата Сообщение от metaluga145 Посмотреть сообщение
Во время выполнения оператора присваивания вылетает ошибка "Access violation",
Нужно видеть, как в коде происходит присваивание.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 16:28  [ТС]     Непонятная для меня ошибка #6
Цитата Сообщение от alsav22 Посмотреть сообщение
Нужно видеть, как в коде происходит присваивание.
Что имеется в виду? Код, написанный мной, есть выше. Или о каком коде идет речь?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 16:42     Непонятная для меня ошибка #7
Цитата Сообщение от metaluga145 Посмотреть сообщение
Что имеется в виду?
Операция присваивания. Применение.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 17:34  [ТС]     Непонятная для меня ошибка #8
alsav22, Вы об этом спрашивали?
C++
1
2
3
4
matrix a(1,1), b(1,1), c(0,0);
a.mat[0][0]=3;
b.mat[0][0]=7;
c=a+b;
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 18:22     Непонятная для меня ошибка #9
Как выглядит конструктор?
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 18:28  [ТС]     Непонятная для меня ошибка #10
alsav22,
C++
1
2
3
4
5
6
7
8
matrix::matrix(int rows, int columns)
{
    matrix::rows=rows;
    matrix::columns=columns;
    mat=new double*[rows]; 
    for (int i=0;i<rows;++i)
    mat[i]=new double[columns];
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 18:42     Непонятная для меня ошибка #11
Т.е., такой код вызывает ошибку?
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
#include <iostream>
using namespace std;
 
class matrix
{
public:
    matrix(int rows, int columns)
    {
        
        matrix::rows=rows;
        matrix::columns=columns;
        mat=new double*[rows]; 
        for (int i=0;i<rows;++i)
            mat[i]=new double[columns];
    }
    ~matrix(void){};
    int columns;//кол столбиков
    int rows;//кол строк
    double **mat;//сама матрица
    //double det(void);
    //matrix inverse(void);//нахождение обратной
    matrix transpon(void);
    void transpon_this(void);
    matrix operator=(const matrix &);//оператор присваивания
    matrix operator+(const matrix &);//оператор сложения
    //matrix operator-(const matrix &);//оператор вычитания
    //matrix operator*(const matrix &);//оператор умножения матриц
    //bool operator==(const matrix &);//оператор сравнения
};
 
matrix matrix::operator=(const matrix &input)
{
    for (int i=0; i<rows;++i)
        delete [] mat[i];
    delete [] mat;
 
    rows=input.rows;
    columns=input.columns;
    mat=new double*[rows]; 
    for (int i=0;i<rows;++i)
        mat[i]=new double[columns];
 
    for (int i=0;i<rows;++i)
        for(int j=0;j<columns;++j)
            mat[i][j]=input.mat[i][j];
    return *this;
}
 
matrix matrix::operator+(const matrix & rightmatrix)
{
    if ((rows==rightmatrix.rows)&&(columns==rightmatrix.columns))
    {
        matrix temp(rows,columns);
        for (int i=0;i<rows;++i)
            for (int j=0;j<columns;++j)
                temp.mat[i][j]=mat[i][j]+rightmatrix.mat[i][j];
        return temp;
    } else return(matrix(0,0));
}
 
int main()
{
    matrix a(1,1), b(1,1), c(0,0);
    a.mat[0][0] = 3;
    b.mat[0][0] = 7;
    c = a + b;
    
    for (int i = 0; i < c.rows; ++i)
        for (int j = 0; j < c.columns; ++j)
            cout << c.mat[i][j] << ' ';
 
    system("pause");
    return 0;
}
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 18:50  [ТС]     Непонятная для меня ошибка #12
alsav22, да
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 18:51     Непонятная для меня ошибка #13
А у меня нет. Какая среда?
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 18:57  [ТС]     Непонятная для меня ошибка #14
VS 2010. А у Вас?

Добавлено через 2 минуты
Хотя еще есть деструктор(не знаю влияет ли он на что-то). Выглядит так:
C++
1
2
3
4
5
6
matrix::~matrix(void)
{
    for (int i=0; i<rows;++i)
        delete [] mat[i];
    delete [] mat;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 19:39     Непонятная для меня ошибка #15
Цитата Сообщение от metaluga145 Посмотреть сообщение
VS 2010. А у Вас?
И у меня.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 19:42  [ТС]     Непонятная для меня ошибка #16
alsav22, можно как-то более удобно связаться?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 19:47     Непонятная для меня ошибка #17
Вот мой ворос:

Цитата Сообщение от alsav22 Посмотреть сообщение
Т.е., такой код вызывает ошибку?
Вот ваш ответ:

Цитата Сообщение от metaluga145 Посмотреть сообщение
alsav22, да
Теперь оказывается вы какой-то свой код пробуете?
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 19:50  [ТС]     Непонятная для меня ошибка #18
alsav22, я не вижу отличий в коде, кроме мною написанного деструктора. Извиняюсь, что не заметил раньше его отсутствие.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 20:18     Непонятная для меня ошибка #19
Цитата Сообщение от metaluga145 Посмотреть сообщение
alsav22, я не вижу отличий в коде, кроме
Это и есть отличие... Явный конструктор копирования нужно добавить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
matrix(const matrix &obj)
{
    rows = obj.rows;
    columns = obj.columns;
    mat = new double*[rows]; 
    for (int i = 0; i < rows; ++i)
        mat[i] = new double[columns];
 
    for (int i = 0; i < rows; ++i)
        for(int j = 0; j < columns; ++j)
            mat[i][j] = obj.mat[i][j];
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 23:26     Непонятная для меня ошибка
Еще ссылки по теме:

непонятная ошибка C++
C++ Неизвестная (для меня) ошибка в коде!
непонятная ошибка C++

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

Или воспользуйтесь поиском по форуму:
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 23:26  [ТС]     Непонятная для меня ошибка #20
Спасибо, я попробую! Тогда у меня еще один вопрос касающийся этой темы. Я читал,что правильно оформлять операторы,которые возвращают ссылку, а не значение. Но у меня по завершению программы (при возврате ссылки) вылазит ошибка(скрин прилагается).
Простите за тупые вопросы, но уж очень хочу научиться
Миниатюры
Непонятная для меня ошибка  
Yandex
Объявления
09.04.2013, 23:26     Непонятная для меня ошибка
Ответ Создать тему
Опции темы

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