С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927

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

08.04.2013, 22:33. Показов 2018. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Во время выполнения оператора присваивания вылетает ошибка "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));
}
И как вообще правильно оформлять такие классы по канонам ООП?(если не сложно пример кода или ссылку на верный путь)

Спасибо всем ответившим!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.04.2013, 22:33
Ответы с готовыми решениями:

непонятная для меня ошибка прошу объяснить знающих людей
Я обращаюсь с проблемой во вроде бы рабочей программе. Задача была построить программу с сортировкой массивов методами пузырька и шейкера....

Неизвестная (для меня) ошибка в коде!
Выпадает вот такая ошибка в коде программы: Вот код: #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace...

Непонятная ошибка
Исходник: #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { char *p; char str; *p = str; ...

27
 Аватар для Xipxop
481 / 9 / 6
Регистрация: 28.12.2011
Сообщений: 151
08.04.2013, 23:02
Лучший ответ Сообщение было отмечено как решение

Решение

Точно не знаю, но советую вам:
Не использовать в названиях: Переменных, функций, классов знаки: ~/*-+=&^%$#@!.

Попробуйте их заменить, мб поможет...
0
0 / 0 / 0
Регистрация: 17.12.2012
Сообщений: 13
08.04.2013, 23:06
Есть готовая лаба! со всем правильным размещение файлов! и всеми функциями и перегрузками! если интересно пишите в лс!
0
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
08.04.2013, 23:12  [ТС]
Xipxop, та вроде нигде,кроме операторов не использовал. Если где-то просто не заметил,то киньте номер строки, пожалуйста.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 01:39
Цитата Сообщение от metaluga145 Посмотреть сообщение
Во время выполнения оператора присваивания вылетает ошибка "Access violation",
Нужно видеть, как в коде происходит присваивание.
0
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 16:28  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Нужно видеть, как в коде происходит присваивание.
Что имеется в виду? Код, написанный мной, есть выше. Или о каком коде идет речь?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 16:42
Цитата Сообщение от metaluga145 Посмотреть сообщение
Что имеется в виду?
Операция присваивания. Применение.
0
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 17:34  [ТС]
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;
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 18:22
Как выглядит конструктор?
0
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 18:28  [ТС]
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];
}
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 18:42
Т.е., такой код вызывает ошибку?
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;
}
0
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 18:50  [ТС]
alsav22, да
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 18:51
А у меня нет. Какая среда?
0
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 18:57  [ТС]
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;
}
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 19:39
Цитата Сообщение от metaluga145 Посмотреть сообщение
VS 2010. А у Вас?
И у меня.
0
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 19:42  [ТС]
alsav22, можно как-то более удобно связаться?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 19:47
Вот мой ворос:

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

Цитата Сообщение от metaluga145 Посмотреть сообщение
alsav22, да
Теперь оказывается вы какой-то свой код пробуете?
0
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 19:50  [ТС]
alsav22, я не вижу отличий в коде, кроме мною написанного деструктора. Извиняюсь, что не заметил раньше его отсутствие.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.04.2013, 20:18
Цитата Сообщение от 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];
}
1
245 / 246 / 38
Регистрация: 08.04.2013
Сообщений: 927
09.04.2013, 23:26  [ТС]
Спасибо, я попробую! Тогда у меня еще один вопрос касающийся этой темы. Я читал,что правильно оформлять операторы,которые возвращают ссылку, а не значение. Но у меня по завершению программы (при возврате ссылки) вылазит ошибка(скрин прилагается).
Простите за тупые вопросы, но уж очень хочу научиться
Миниатюры
Непонятная для меня ошибка  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.04.2013, 23:26
Помогаю со студенческими работами здесь

Непонятная ошибка
Добрый день. Переделывал код https://www.cyberforum.ru/cpp-beginners/thread53080.html под свои нужды. Немогу понять в чём ошибка. Заранее...

Непонятная ошибка
Здравствуйте, есть код, в котором два раза выполняется одна и та же последовательность, первый раз выполняется без ошибок, во второй раз...

непонятная ошибка
Почему здесь выбивает ошибку? Помогите последнюю лабу сделать) if (x&lt;(*Node)-&gt;l) Add(x,&amp;(*Node)-&gt;l); #include...

Непонятная ошибка
Вообщем имеется такой код: // главная программа aka programm.cpp #include &quot;Sales_item.h&quot; using namespace std; ...

непонятная ошибка
Здравствуйте. Вот в этой программе у меня пишет ошибку: cpp(60) : error C2065: 'j_max' : undeclared identifier. Хотя если вместо Y...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru