Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Anovsyankin
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 1
1

Ошибка в программе. Срабатывание точки останова

01.10.2016, 01:55. Просмотров 419. Ответов 5
Метки нет (Все метки)

Класс матрицы,операторы суммы,присваивания и умножения матриц.

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
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <iostream> 
using namespace std;
const int N = 100;
class Matrix
{
    int *mat;
    int size;
public:
    Matrix() 
    {
         mat =  new int [N*N];
    }
    Matrix(const Matrix& orig) 
    {
        int i = 0;
        int j = 0;
        this->size = orig.size;
        while (j + i*size<size*size) 
        {
            (&mat)[j + i*size] = (&orig.mat)[j + i*size];
            j++;
            if (j == size) { j = 0; i++; }
        }
    }
    Matrix(int size1) 
    {
        size = size1;
        for (int j = 0; j < size*size; j++)
        {
            mat[j] = rand() % 100;
        }
    }
    Matrix(int *diag,int size1)  // диагональная матрица
    {
        size = size1;
        int i = 0;
        int j = 0;
        (&mat)[0] = diag;
        while (j + i*size<size*size) 
        {
            if (i == j)
            {
                mat[j + i*size] = *diag;
            }
            j++;
            if (j == size) { j = 0; i++; }
        }
        for (int k = 0; k < size*size; k++)
        {
            if (mat[k] != *diag) { mat[k] = 0; }
        }
 
    }
    ~Matrix() 
    {
        delete[] mat;
    }
    Matrix operator+(Matrix& a) 
    {
        Matrix *result = new Matrix;
        result->size = size;
        for (int i = 0; i < size*size; i++) 
        {
            result->mat[i]=this->mat[i] + a.mat[i];
        }
        return *result;
    }
    Matrix& operator=(Matrix& a) 
    {
        for (int i = 0; i < size*size; i++)
        {
            mat[i] = a.mat[i];
        }
        return *this;
    
    }
    Matrix operator*(const Matrix a) 
    {
        int j = 0;
        int i = 0;
        Matrix *result=new Matrix;
        result->size = size;
        while (j+i*size<size*size) 
        {
            result->mat[j + i*size] = 0;
            for (int k = 0; k < size; k++)
            {
                result->mat[j + i*size] +=mat[k + i*size] * a.mat[j + k*size];
            }
            j++;
            if (j == size) { j = 0; i++; }
        }
        return *result;
    }
    void zapolnenie() 
    {
        int i = 0;
        int j = 0;
        while(j+i*size<size*size)
        {
            scanf("%d",&mat[j +i*size]);
            j++;
            if (j == size) { j = 0; i++; }
        }
    }
    void input_size(int b)
    {
        size = b;
    }
    void vivod()
    {
        int i = 0;
        int j = 0;
        while (j + i*size<((size)*(size)))
        {
            cout << mat[j + i*size] << " " ;
            if (j == size - 1) { cout << endl; }
            j++;
            if (j == size) { j = 0; i++; }
        }
    }
    void trans()  // транспонирование матрицы
    {
        int c = 0;
        int i = 0;
        int j = 0;
        while (j + i*size<((size)*(size)))
        {
            if (j > i)
            {
                c = mat[j + i*size];
                mat[j + i*size] = mat[i + j*size];
                mat[i + j*size] = c;
            }
            j++;
            if (j == size) { j = 0; i++; }
        }
    }
};
 
 
 
void main()
{
    int ker = 0;
    int mat_size = 0;
    cin >> mat_size;
    cin >> ker;
    Matrix A;
    A.input_size(mat_size);
    A.zapolnenie();
    Matrix B;
    B.input_size(mat_size);
    B.zapolnenie();
    Matrix C;
    C.input_size(mat_size);
    C.zapolnenie();
    C.trans();
    Matrix K(&ker, mat_size);
    Matrix D;
    D.input_size(mat_size);
    D.zapolnenie();
    D.trans();
    B = B*C;
    A = A + B;
    A = A + K;
    A = A * D;
    A.vivod();
}
После вывода матрицы на экран выдает ошибку (Срабатывание точки останова).Работает правильно,выводит все корректно. В чем проблема? Помогите пожалуйста.

Добавлено через 8 минут
Вызывал деструктор для каждой созданной матрицы,не помогло
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2016, 01:55
Ответы с готовыми решениями:

Ошибка (вызвали срабатывание точки останова)
1)Компилятор ошибка (вызвали срабатывание точки останова.) Как очистит память ?...

Компилятор ошибка (вызвали срабатывание точки останова)
1)Компилятор ошибка (вызвали срабатывание точки останова.) Как очистит память ?...

Ошибка: ConsoleApplication1.exe вызвал срабатывание точки останова
Потихоньку начинаю разбираться в работе с файлами, но пока без особых успехов....

Красно-Черное дерево ОШИБКА .exe вызвал срабатывание точки останова
Подскажите может какую-то библиотеку добавить Строка 330 вот что пишет при...

Динамический массив и строки и ошибка app4.exe вызвал срабатывание точки останова
Ребята, подскажите, создал динамический массив типа char, заполняю его 3-мя...

5
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
01.10.2016, 06:07 2
Цитата Сообщение от Anovsyankin Посмотреть сообщение
В чем проблема?
В кривом коде. Ошибок много, и разных.
Какое отношение N имеет к size? Убери такой конструктор по умолчанию. Если создаёшь объект Matrix в операторах, то не нужно создавать его в куче, иначе - утечка памяти. Судя по операторам, у тебя все матрицы предполагаются одинакового размера, или как?
Цитата Сообщение от Anovsyankin Посмотреть сообщение
C++
1
(&mat)[j + i*size] = (&orig.mat)[j + i*size];
Зачем здесь взятие адреса?
0
DemolitionMan
129 / 155 / 87
Регистрация: 06.04.2016
Сообщений: 992
01.10.2016, 08:11 3
Цитата Сообщение от nd2 Посмотреть сообщение
(&mat)[j + i*size]
[j + i*size] - эмуляция двухмерного массива?

Добавлено через 15 минут
Неудобно сделали, как будто двухмерный массив запихан внутрь одномерного и из-за этого очень сложный и непонятный код. Может перейти на двухмерный динамический массив? А между прочим на этом форуме есть код: создание двухмерного динамичекого массива. Ищите лучше. Или может остаться на одномерном массиве? Тогда и код будет проще.
0
nmcf
6277 / 5578 / 2539
Регистрация: 14.04.2014
Сообщений: 23,476
01.10.2016, 09:02 4
Что за (&mat)[j + i*size]? Должно быть
C++
1
*(mat + j + i * size)
Цитата Сообщение от DemolitionMan Посмотреть сообщение
Тогда и код будет проще.
Зато будут циклы создания/удаления, а здесь одни куском.
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
01.10.2016, 09:05 5
Цитата Сообщение от nmcf Посмотреть сообщение
Должно быть
Можно и так:
C++
1
 mat[j + i * size]
0
DemolitionMan
129 / 155 / 87
Регистрация: 06.04.2016
Сообщений: 992
01.10.2016, 10:46 6
Вот ошибка:
Цитата Сообщение от Anovsyankin Посмотреть сообщение
Строка 40: (&mat)[0] = diag;
Нужно написать так:
C++
1
mat[0] = *diag;
0
01.10.2016, 10:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2016, 10:46

Ошибка в коде "вызвано срабатывание точки останова"
Вот код на С++ По идее все должно работать, но мне выдается ошибка, которую я...

Почему вылетает ошибка "файл вызвал срабатывание точки останова"?
Уже который день мучаюсь с сортировками Тестируешь, вроде всё нормально, но...

Выползает такая ошибка "test.exe вызвал срабатывание точки останова."
Одну итерацию цикла программа проходит, затем на середине второй выскакивает...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru