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

Деструктор вызывается для результата сложения ДО присваивания, и дальше все падает. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Матрица и ее диагональ http://www.cyberforum.ru/cpp-beginners/thread1226055.html
дана квадратная матрица размером 7*7 она заполняется рандомными целыми числами, а также выводится на экран. Вопрос 1: я хотел при выводе матрицы использовать строку cout.width(4); Но она не прошла. Компилятор что-то говорил не по-русски ... Далее. Эта матрица преобразуется по следующему алгоритму: В главной диагонали берётся верхний элемент. Он сравнивается со всеми элементами матрицы...
C++ Создать структуру, которая будет включать в себя какой-то набор структур-компонент Всем привет! Есть несколько структур-компонент, выбор структуры зависит от некоторого условия (от флага 1/2/3...) Реально ли в самой программе создать структуру, которая будет включать в себя какой-то набор структур-компонент, соответствующий значению флага? Пример: Если первый байт заголовка файла = 1, то в структуре должны быть структура "Время", "Имя", а если = 2, то "Время", "ФИО",... http://www.cyberforum.ru/cpp-beginners/thread1226053.html
C++ Вывод результатов с форматированием
Добрый день. Простая задача с решением квадратного уравнения, проблема в том, что корни выводятся не в нужном мне формате, мне нужно, чтобы выводились с погрешностью 10^-4, допустим корни 3 и 4, на выводе: 3.0000 и 4.0000, как быть, помогите пожалуйста? #include "stdafx.h" #include "stdio.h" #include "iostream" #include "algorithm" using namespace std; void main()
Попробуйте вникнуть в логику шпионов и рассекретить их переписку. Панграмма C++
Входные данные Первая строка содержит незашифрованный «ключ» длины K (26 <= K <= 100). Вторая строка содержит шифртекст длины S (10 <= S <= 1000). Ключ и шифртекст составлены из больших и малых букв латинского алфавита, пробелов и знаков препинания. В шифртексте закодированы исключительно буквенные символы. Выходные данные Выведите одну строку длины S — расшифрованное сообщение....
C++ Поменять местами слова, "равноудаленные" от концов строки http://www.cyberforum.ru/cpp-beginners/thread1226005.html
Помогите пожалуйста с задачкой. Задача: Поменять местами слова, "равноудаленные" от концов строки, найти первое цифровое слово и возвести его значение в квадрат. Ввод строки и вывод слов написал, но не могу придумать как дальше делать. Последнее слово не выводится , т.к нету пробела ( если его принудительно не вводить) как сделать что бы в конце строки всегда был пробел? #include...
C++ Сортируются все элементы, кроме первого Всем привет! Пишу сортировку, но где то закралась ошибка: int A; A = 6; A = 7; A = 3; A = 10; A = 5; int q; for(int i = 0; i < 5; i++) подробнее

Показать сообщение отдельно
Вадим Ром
0 / 0 / 1
Регистрация: 11.07.2014
Сообщений: 8
11.07.2014, 15:36     Деструктор вызывается для результата сложения ДО присваивания, и дальше все падает.
Подскажите пожалуйста! Написал класс матриц с перегруженными операторами
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
class Matrix3d{
public:
  double** matrix;
  Matrix3d();
  Matrix3d(double m11,double m12,double m13,double m21,double m22,double m23,double m31,double m32,double m33);
  ~Matrix3d();
  Matrix3d* Inverse();
  double determinant();
  double getvalue(int i,int j);
  void setvalue(int i,int j, double value);
  Matrix3d& operator=(const Matrix3d& matr);
  Vector3d operator*(const Vector3d& v);
  Matrix3d operator+(const Matrix3d& m);
  Matrix3d& operator+=(const Matrix3d& matr);
  Matrix3d& operator-=(const Matrix3d& matr);
  static Matrix3d* createBasisByOneVector(const Vector3d& v);
};
 
#include "math.h"
#include "stdio.h"
 
#include "matrix3d.h"
#include "vector3d.h"
#include "constants.h"
 
Matrix3d::Matrix3d(){
  int i,j;
  matrix=new double* [3];
  for(i=0;i<3;++i){
    matrix[i]=new double [3];
    for (j=0;j<3;++j){
      if (i==j){
        matrix[i][j]=1;
      }else{
        matrix[i][j]=0;
      }
    }
  }
}
 
Matrix3d::  Matrix3d(double m11,double m12,double m13,double m21,double m22,double m23,double m31,double m32,double m33){
    matrix=new double* [3];
    for(int i=0;i<3;++i){
        matrix[i]=new double [3];
    }
    matrix[0][0] = m11;
    matrix[0][1] = m12;
    matrix[0][2] = m13;
    matrix[1][0] = m21;
    matrix[1][1] = m22;
    matrix[1][2] = m23;
    matrix[2][0] = m31;
    matrix[2][1] = m32;
    matrix[2][2] = m33;
}
 
Matrix3d::~Matrix3d(){
  int i;
  for(i=0;i<3;++i){
    delete[] matrix[i];
  }
  delete[] matrix;
}
Matrix3d* Matrix3d::Inverse(){
  Matrix3d* inv = new Matrix3d();
  double det;
  det=matrix[0][0]*(matrix[1][1]*matrix[2][2]-matrix[1][2]*matrix[2][1])-matrix[0][1]*(matrix[1][0]*matrix[2][2]-matrix[1][2]*matrix[2][0])+matrix[0][2]*(matrix[1][0]*matrix[2][1]-matrix[1][1]*matrix[2][0]);
  if (fabs(det) > epsilon){
    inv->matrix[0][0]=(1/det)*(matrix[1][1]*matrix[2][2]-matrix[1][2]*matrix[2][1]);
    inv->matrix[0][1]=-(1/det)*(matrix[0][1]*matrix[2][2]-matrix[0][2]*matrix[2][1]);
    inv->matrix[0][2]=(1/det)*(matrix[0][1]*matrix[1][2]-matrix[0][2]*matrix[1][1]);
    inv->matrix[1][0]=-(1/det)*(matrix[1][0]*matrix[2][2]-matrix[1][2]*matrix[2][0]);
    inv->matrix[1][1]=(1/det)*(matrix[0][0]*matrix[2][2]-matrix[0][2]*matrix[2][0]);
    inv->matrix[1][2]=-(1/det)*(matrix[0][0]*matrix[1][2]-matrix[1][0]*matrix[0][2]);
    inv->matrix[2][0]=(1/det)*(matrix[1][0]*matrix[2][1]-matrix[1][1]*matrix[2][0]);
    inv->matrix[2][1]=-(1/det)*(matrix[0][0]*matrix[2][1]-matrix[0][1]*matrix[2][0]);
    inv->matrix[2][2]=(1/det)*(matrix[0][0]*matrix[1][1]-matrix[1][0]*matrix[0][1]);
  } else {
      printf("determinant = 0\n");
  }
  return inv;
}
double Matrix3d::determinant(){
  double temp;
  temp=matrix[0][0]*(matrix[1][1]*matrix[2][2]-matrix[1][2]*matrix[2][1])-matrix[0][1]*(matrix[1][0]*matrix[2][2]-matrix[1][2]*matrix[2][0])+matrix[0][2]*(matrix[0][1]*matrix[2][1]-matrix[1][1]*matrix[0][2]);
  return temp;
}
double Matrix3d::getvalue(int i,int j){
  return matrix[i][j];
}
void Matrix3d::setvalue(int i,int j, double value){
  matrix[i][j]=value;
}
Matrix3d& Matrix3d::operator=(const Matrix3d& matr){
  int i;
  int j;
  for(i=0;i<3;++i){
    for(j=0;j<3;++j){
        matrix[i][j]=matr.matrix[i][j];
    }
  }
  return *this;
}
 
Vector3d Matrix3d::operator*(const Vector3d& v){
    double x = matrix[0][0]*v.x + matrix[0][1]*v.y + matrix[0][2]*v.z;
    double y = matrix[1][0]*v.x + matrix[1][1]*v.y + matrix[1][2]*v.z;
    double z = matrix[2][0]*v.x + matrix[2][1]*v.y + matrix[2][2]*v.z;
    return Vector3d(x,y,z);
}
 
Matrix3d Matrix3d::operator+(const Matrix3d& matr){
    Matrix3d newMatrix;
    int i;
    int j;
    for(i=0;i<3;++i){
        for(j=0;j<3;++j){
            newMatrix.matrix[i][j]=matr.matrix[i][j] + matrix[i][j];
        }
    }
    return newMatrix;
}
 
Matrix3d& Matrix3d::operator+=(const Matrix3d& matr){
    int i;
    int j;
    for(i=0;i<3;++i){
        for(j=0;j<3;++j){
            matrix[i][j] = matr.matrix[i][j] + matrix[i][j];
        }
    }
    return *this;
}
 
Matrix3d& Matrix3d::operator-=(const Matrix3d& matr){
    int i;
    int j;
    for(i=0;i<3;++i){
        for(j=0;j<3;++j){
            matrix[i][j] = matrix[i][j] - matr.matrix[i][j];
        }
    }
    return *this;
}
 
Matrix3d* Matrix3d::createBasisByOneVector(const Vector3d& v){
    if ((v.z*v.z + v.y*v.y + v.x*v.x) < epsilon){
        return new Matrix3d(1,0,0,0,1,0,0,0,1);
    }
    double theta = acos(v.z/sqrt(v.z*v.z + v.y*v.y + v.x*v.x));
    double phi = atan2(v.y,v.x);
    return new Matrix3d(sin(phi),cos(theta)*cos(phi),sin(theta)*cos(phi),-cos(phi),cos(theta)*sin(phi),sin(theta)*sin(phi),0,-sin(theta),cos(theta));
}
Далее в основной программе пишу

C++
1
2
3
4
5
    Matrix3d A;
    Matrix3d B;
    Matrix3d C;
 
    A = B+C;
В итоге деструктор вызывается для результата сложения ДО присваивания, и дальше все падает. Что делать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru