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

удаление динамеческого массива в деструкторе - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ malloc vs new http://www.cyberforum.ru/cpp-beginners/thread807166.html
Доброго времени суток. Когда я для выделения памяти пользовался malloc/calloc и освобождал с помощью free, у меня вылетала ошибка: ОС Windows инициировала точку останова в SSL_sockets.exe. Это может быть вызвано повреждением кучи и указывает на ошибку в SSL_sockets.exe или в одной из загруженных им DLL. Память выделяю под строку типа wchar_t. Например, сломалось на выделении памяти: ...
C++ Работа с файлом ofstream file1("C:\\Users\\User\\Desktop\\jewelry.txt"); Ошибка 6 error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "file1" Оъясните как исправить эту ошибку. Спс. http://www.cyberforum.ru/cpp-beginners/thread807163.html
C++ преобразование типов в с++
Собственно вопрос в следующем. Распишите пожалуйста по шагам что происходит при выполнении данного кода { //... myclass x(10); x=12345; //... } С первой строчкой всё ясно - вызывается конструктор класса myclass , который создаёт объект o.
C++ Вывести предложения, заканчивающие знаком аопроса
Вывести вопросительные предложения где ошибка? #include <iostream> #include <string> using namespace std; int main() { string s,s4="";
C++ Диапазон чисел - вывести по порядку, указывая сколько строк должно быть http://www.cyberforum.ru/cpp-beginners/thread807153.html
Здравствуйте! Я новичек, и пробую сам изучать С++ решая задачки. Вот собственно застрял на одном вопросе. Знаю что решение довольно простое. Но чегото никак не выходит, и гуглем не мог найти решения.... Допустим мне надо вывести цифры от 1 до 100 по порядку. 10*10 количество строк и столбцов. Как это сделать применяя циклы for и используя двумерный массив, а также не пользуясь массивами !?...
C++ Динамический массив произвольного размера динамический массив заданного размера: int *massiv = new int а как организовать произвольного размера? спасибо. подробнее

Показать сообщение отдельно
cskurt
0 / 0 / 0
Регистрация: 04.03.2013
Сообщений: 14
13.03.2013, 15:01  [ТС]     удаление динамеческого массива в деструкторе
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cout << "Перемножение матриц:" << endl;
    if (m==3)
    {
    Matrix c3(n,3);
    for (i=0;i<n;i++) for (j=0;j<3;j++) 
    {
        handle1=0; 
        for (k=0;k<3;k++) handle1+=c1.mass1[i][k]*c2.mass1[k][j];
        c3.mass1[i][j]=handle1;
    }
    for (i=0;i<n;i++)
    {
       for (j=0;j<3;j++)
       {
           cout << c3.mass1[i][j] << " ";
       }
       cout << endl;
    }
    }
    else cout << "Ошибка: Размеры матриц не соответствуют правилам умножения матриц" << endl;
я как увидел реализацию констрктора и дестрктора для матриц сразу догадался как правильнее будет сделать, всем спасибо, без вас я бы еще неделю долбился бы.

Добавлено через 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
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
#include <time.h>
#include <iostream>
using namespace std;
 
class Matrix
{
private:
    int mn,mm,**mass1;
    int right,left,i;
public:
    friend int operator*(Matrix &left,Matrix &right)
    {
        return left*right;
    }
    
    friend int operator+(Matrix &left,Matrix &right)
    {
        return left+right;
    }
    
    
    Matrix(int n,int m)
    {
        mn=n;mm=m;
        mass1=(int**)malloc(n*sizeof(int*));
        for (i=0;i<n;i++) mass1[i]=(int*)malloc(m*sizeof(int));
    }
    
    Matrix()
    {
        mn=3;mm=3;
        mass1=(int**)malloc(3*sizeof(int*));
        for (i=0;i<mm;i++) mass1[i]=(int*)malloc(3*sizeof(int));
    }
    
    ~Matrix()
    {
        for (int i=0;i<mn;++i)
            free(mass1[i]);
        free(mass1);
    }
    int get(int i,int j)
    {
        return mass1[i][j];
    }
    void set(int i,int j)
    {
        mass1[i][j]=rand()%3;
    }
    void set(int i,int j,int handle1)
    {
        mass1[i][j]=handle1;
    }
 
};
 
int main()
{
    setlocale( LC_ALL,"rus" );
    
    int i,j,n,m,k,handle1;
    n=3; //строки
    m=3; //столбцы
    
    srand(time(NULL)); 
   
    cout << "Матрица 1:" << endl;
    
    Matrix c1(n,m);
    
    for (i=0;i<n;i++)
    {
       for (j=0;j<m;j++)
       {
           c1.set(i,j);
           cout << c1.get(i,j) << " ";
       }
       cout << endl;
     }
    
    cout << "Матрица 2:" << endl;
 
    Matrix c2;
    
    for (i=0;i<3;i++)
    {
       for (j=0;j<3;j++)
       {
           c2.set(i,j);
           cout << c2.get(i,j) << " ";
       }
       cout << endl;
    }
    
    cout << "Перемножение матриц:" << endl;
 if (m==3)
 {
 Matrix c3(n,3);
 for (i=0;i<n;i++) for (j=0;j<3;j++) 
 {
 handle1=0; 
 for (k=0;k<3;k++) handle1+=c1.get(i,k)*c2.get(k,j);
 c3.set(i,j,handle1);
 }
 for (i=0;i<n;i++)
 {
 for (j=0;j<3;j++)
 {
 cout << c3.get(i,j) << " ";
 }
 cout << endl;
 }
 }
 else cout << "Ошибка: Размеры матриц не соответствуют правилам умножения матриц" << endl;
    
    cout << "Сложение матриц:" << endl;
    if ((n==3) && (m==3)) for (i=0;i<n;i++)
    {
       for (j=0;j<3;j++)
       {
           cout << c1.get(i,j)+c2.get(i,j) << " ";
       }
       cout << endl;
    }
    else {cout << "Ошибка: Размеры матриц не соответствуют правилам сложения матриц" << endl;}
    cout << endl;
    
    system("pause");
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru