Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для EfesXZC
2 / 2 / 2
Регистрация: 07.08.2015
Сообщений: 72

Вылет программы при создании объекта

10.10.2015, 18:25. Показов 3356. Ответов 54
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Начал изучать классы с создания класса для работы с массивами, класс должен работать как с одномерными так и двумерными динамическими массивами. Но возникла проблема: программа отчего-то вылетает при создании объекта. С чем это может быть связано?
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
class Massiv {
private:
    int N;
    int *mas_1;
    int **mas_2;
    int R, C;
public:
    Massiv(){                 //конструктор без параметров
    }
 
    Massiv(int size)          // конструктор одномерного массива
        {
            N = size;
            mas_1 = new int [N];
            for(int i = 0; i < N; i++)
               {
                  mas_1[i] = 0;
               }
        }
 
 
    Massiv(int rows, int columns )                  //конструктор двумерного массива
    {
        R = rows;
        C = columns;
        mas_2 = new int* [R];                       // R строк в массиве
            for (int i = 0; i < R; i++)
                mas_2[i] = new int [C];             // и С столбцов
 
            for (int i_row = 0; i_row < R; i_row++)
                    for (int j_column = 0; j_column < C; j_column++)
                        mas_2[i_row][j_column] = 0;
    }
 
 
    ~Massiv()
    {
        //высвобождение памяти отводимой под одномерный динамический массив:
        delete []mas_1;
 
        // высвобождение памяти отводимой под двумерный динамический массив:
        for (int i = 0; i < R; i++)
            delete [] mas_2[i];
    }
 
    int &operator[](int j)      //перегрузка [] для индексации одномерного массива
        {
            return mas_1[j];
        }
 
    void showData()                 //вывод одномерного массива на экран
        {
            for(int i = 0; i < N; i++)
            {
                cout << mas_1[i] << " | ";
            }
        }
 
    void showData_2()               //вывод двумерного массива на экран
        {
        for (int i_row = 0; i_row < R; i_row++)
            {
                for (int j_column = 0; j_column < C; j_column++)
                    cout << mas_2[i_row][j_column] << "   ";
                    cout << endl;
            }
        }
 
    void addNumber_arm()            //Ручной ввод данных одномерного массива
    {
        for(int i = 0; i < N; i++)
        {
            cin >> mas_1[i];
        }
    }
 
    void addNumber_rand_2()        //Рандомный ввод данных двумерного массива
    {
        for (int i_row = 0; i_row < R; i_row++)
                for (int j_column = 0; j_column < C; j_column++)
                    mas_2[i_row][j_column] = (rand() % 10 + 1) / int((rand() % 10 + 1));
    }
 
    void addNumber_arm_2()        //Ручной ввод данных двумерного массива
    {
        for (int i_row = 0; i_row < R; i_row++)
                for (int j_column = 0; j_column < C; j_column++)
                    cin >> mas_2[i_row][j_column];
    }
 
    void deleteIData_1(int x)     //Удаление i-ого элемента одномерного массива
    {
        for(int i = x; i < N; i++)
        {
            mas_1[i] = mas_1[i+1];
        }
       N--;
    }
};
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.10.2015, 18:25
Ответы с готовыми решениями:

Вылет из программы при выполнении
Вот ф-ция из-за которой вылетает программа.Ф-ция считает среднее арифметическое соседних элементов массива который был обьявлен как...

Вылет при работе программы с неизвестной ошибкой
#include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; int main() { int x=0; // хранит количество слов в строке ...

Вылет программы при удалении динамического массива
Писал программу с использованием динамического массива, все компилилось нормально, но в какой-то момент программа просто начала вылетать,...

54
 Аватар для EfesXZC
2 / 2 / 2
Регистрация: 07.08.2015
Сообщений: 72
10.10.2015, 19:58  [ТС]
Студворк — интернет-сервис помощи студентам
А вообще, не правильней ли будет создать абстрактный класс и от него наследовать два класса, один из которых содержит средства для работы с одномерными массивами, а другой - с двумерными. Или это дело вкуса?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
10.10.2015, 20:03
Цитата Сообщение от EfesXZC Посмотреть сообщение
И это не спасает
EfesXZC, просто скачайте свежий набор Qt + QtCreator + MinGW.

Добавлено через 2 минуты
EfesXZC, проще сделать класс Matrix, в котором одномерный массив будет частным случаем двумерного массива с размерностью rows = 1
1
 Аватар для EfesXZC
2 / 2 / 2
Регистрация: 07.08.2015
Сообщений: 72
10.10.2015, 20:05  [ТС]
Цитата Сообщение от gru74ik Посмотреть сообщение
Нормально кушает флаги и на C++11 и на C++14.
Видимо мистика

Добавлено через 2 минуты
Цитата Сообщение от gru74ik Посмотреть сообщение
просто скачайте свежий набор Qt + QtCreator + MinGW.
Буду пробовать...
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
10.10.2015, 20:20
EfesXZC, вот Вам мой вариант:

Matrix.h
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
#ifndef MATRIX_H
#define MATRIX_H
 
#include <iostream>
 
typedef int Item;
 
class Matrix
{
private:
    int m_row;
    int m_col;
    Item ** matrix;
 
public:
    Matrix(int row, int col);
    explicit Matrix(int col);
    Matrix(const Matrix & m);
    ~Matrix();
 
    void reset();
    void fill_rand(int fromNum, int toNum);
    void fill_by_user();
    Item find_min_value();
    Item find_max_value();
    Item find_avg_value();
 
    Matrix & operator=(const Matrix & m);
    Matrix & operator*(const Matrix & m);
    friend std::ostream & operator<<(std::ostream & os, const Matrix & m);
};
 
#endif // MATRIX_H


Matrix.cpp
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
#include "Matrix.h"
#include <ctime>
#include <cstdlib>
#include <windows.h>
 
Matrix::Matrix(int row, int col)
{
    m_row = row;
    m_col = col;
 
    matrix = new Item * [m_row];
    for (int i = 0; i < m_row; ++i)
        matrix[i] = new Item[m_col];
}
 
Matrix::Matrix(int col)
{
    m_row = 1;
    m_col = col;
 
    matrix = new Item * [m_row];
    for (int i = 0; i < m_row; ++i)
        matrix[i] = new Item[m_col];
}
 
Matrix::Matrix(const Matrix & m)
{
    m_row = m.m_row;
    m_col = m.m_col;
 
    matrix = new Item * [m_row];
    for (int i = 0; i < m_row; ++i)
        matrix[i] = new Item[m_col];
 
    for (int i = 0; i < m_row; ++i)
        for (int j = 0; j < m_col; ++j)
            matrix[i][j] = m.matrix[i][j];
}
 
Matrix::~Matrix()
{
    for (int i = 0; i < m_row; ++i)
        delete [] matrix[i];
    delete [] matrix;
}
 
void Matrix::reset()
{
    for (int i = 0; i < m_row; ++i)
        for (int j = 0; j < m_col; ++j)
            matrix[i][j] = 0;
}
 
void Matrix::fill_rand(int fromNum, int toNum)
{
    Sleep(800);
    srand(time(0));
    for (int i = 0; i < m_row; ++i)
        for (int j = 0; j < m_col; ++j)
            matrix[i][j] = fromNum + rand()%(toNum - fromNum);
}
 
void Matrix::fill_by_user()
{
    for (int i = 0; i < m_row; ++i)
        for (int j = 0; j < m_col; ++j)
        {
            std::cout << "\nEnter a value of the element matrix["
                      << i <<"][" << j << "]: ";
            std::cin >> matrix[i][j];
        }
}
 
Item Matrix::find_min_value()
{
    Item min_value = matrix[0][0];
    for (int i = 0; i < m_row; ++i)
        for (int j = 0; j < m_col; ++j)
            if (min_value > matrix[i][j])
                min_value = matrix[i][j];
    return min_value;
}
 
Item Matrix::find_max_value()
{
    Item max_value = matrix[0][0];
    for (int i = 0; i < m_row; ++i)
        for (int j = 0; j < m_col; ++j)
            if (max_value < matrix[i][j])
                max_value = matrix[i][j];
    return max_value;
}
 
Item Matrix::find_avg_value()
{
    Item sum = 0;
    for (int i = 0; i < m_row; ++i)
        for (int j = 0; j < m_col; ++j)
            sum += matrix[i][j];
    return sum / (m_row * m_col);
}
 
Matrix & Matrix::operator=(const Matrix & m)
{
    if (this != &m)
    {
        for (int i = 0; i < m_row; ++i)
            delete [] matrix[i];
        delete [] matrix;
 
        m_row = m.m_row;
        m_col = m.m_col;
 
        matrix = new Item * [m_row];
        for (int i = 0; i < m_row; ++i)
            matrix[i] = new Item[m_col];
 
        for (int i = 0; i < m_row; ++i)
            for (int j = 0; j < m_col; ++j)
                matrix[i][j] = m.matrix[i][j];
    }
 
    return *this;
}
 
Matrix & Matrix::operator*(const Matrix & m)
{
    if (m_row == m.m_row && m_col == m.m_col)
    {
        for (int i = 0; i < m_row; ++i)
            for (int j = 0; j < m_col; ++j)
                matrix[i][j] *= m.matrix[i][j];
    }
 
    return *this;
}
 
std::ostream & operator<<(std::ostream & os, const Matrix & m)
{
    for (int i = 0; i < m.m_row; ++i)
    {
        for (int j = 0; j < m.m_col; ++j)
            os << m.matrix[i][j] << "\t";
        os << "\n";
    }
 
    return os;
}


main.cpp
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
#include "Matrix.h"
 
int main()
{
    std::cout << "Please choose number of rows: ";
    int rsize;
    std::cin >> rsize;
    std::cout << "Please choose number of columns: ";
    int csize;
    std::cin >> csize;
    Matrix matrix1(rsize, csize);
 
    matrix1.fill_by_user();
    std::cout << "\nThis is first matrix filled by user:\n"
              << matrix1;
 
    Matrix matrix2(rsize, csize);
    matrix2.fill_rand(10, 99);
    std::cout << "\nThis is second matrix filled by computer:\n"
              << matrix2;
 
    std::cout << "\nThis is the first matrix after multiplication by a second:\n"
              << matrix1 * matrix2;
 
    matrix1 = matrix2;
    std::cout << "\nThis is first matrix after assign to second matrix:\n"
              << matrix1;
 
    Matrix matrix3(csize);
    matrix3.fill_rand(10, 99);
    std::cout << "\nThis is third matrix:\n"
              << matrix3;
 
    return 0;
}
Миниатюры
Вылет программы при создании объекта  
1
 Аватар для EfesXZC
2 / 2 / 2
Регистрация: 07.08.2015
Сообщений: 72
10.10.2015, 20:46  [ТС]
gru74ik, конечно интересней было бы самому написать , но спасибо. Буду изучать и пытаться добавлять новые методы
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
10.10.2015, 20:46
Цитата Сообщение от EfesXZC Посмотреть сообщение
gru74ik, конечно интересней было бы самому написать
Прошу прощения, что сломал кайф (((
0
 Аватар для EfesXZC
2 / 2 / 2
Регистрация: 07.08.2015
Сообщений: 72
10.10.2015, 20:53  [ТС]
Цитата Сообщение от gru74ik Посмотреть сообщение
Прошу прощения, что сломал кайф
Охохо, чувствую этот "кайф" я еще прочувствую по полной, на тернистом пути изучения С++ )
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
10.10.2015, 21:00
Цитата Сообщение от EfesXZC Посмотреть сообщение
этот "кайф" я еще прочувствую по полной, на тернистом пути изучения С++
Если основная мотивация изучения именно интерес, то, как говорил Роман Ойра-Ойра
Интереснее, чем у нас, вам нигде не будет
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
10.10.2015, 21:59
Цитата Сообщение от EfesXZC Посмотреть сообщение
Massiv(int rows, int columns )
попробуйте такой подход к конструктору:
Massiv(int rows, int columns=1)
т.е. одномерный массив - это двумерный с одним столбцом
Логика работы сразу упростится.
Ну и еще зачем под каждую строку выделять память отдельно? У вас что размер блока ограничен?
Выделите одним куском, и расcтавте указатели на начало строк. Т.е. воспринимайте двумерный массив как одномерный порезанный на куски равной длины. Тоже сильно упростит логику а соответственно и работу с памятью.
0
 Аватар для EfesXZC
2 / 2 / 2
Регистрация: 07.08.2015
Сообщений: 72
11.10.2015, 00:16  [ТС]
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
попробуйте такой подход к конструктору:
Massiv(int rows, int columns=1)
Fulcrum_013, уже так и сделал

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Выделите одним куском, и расcтавте указатели на начало строк. Т.е. воспринимайте двумерный массив как одномерный порезанный на куски равной длины.
А вот тут не понял... С указателями, в принципе, пока туго.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.10.2015, 13:19
Цитата Сообщение от EfesXZC Посмотреть сообщение
А вот тут не понял... С указателями, в принципе, пока туго.
Да все с ними просто. указатель это переменная в которой записан номер ячейки памяти. Соответственно A[i] это тоже самое что *(A+i).
Соответсвенно под данные для двумерного массива память можно выделить так:
C++
1
Data=new DataType[ColCount*RowCount];
Но обращаться к элементу с индексом Row и Col при этом придется вот так:
Data[Row*ColCount+Col]; что не очень удобно и даже если инкапсулировано в метод класса медленно.
Поэтому добавляем табличку ускорения в виде массива указателей на строки:
C++
1
2
3
4
Rows=new DataType*[RowCount];
Rows[0]=Data;
//инициализируем табличку:
for(int i=1;i<RowCount;i++) Rows[i]=Rows[i-1]+ColCount;
Теперь обращаться к элементу можно как Rows[Row][Col];
Ну и в деструкторе все просто становится:
C++
1
2
   delete [] Data;
   delete [] Rows;
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.10.2015, 14:06
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
т.е. одномерный массив - это двумерный с одним столбцом
с одной строкой.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.10.2015, 14:13
Цитата Сообщение от hoggy Посмотреть сообщение
с одной строкой.
Не суть важно, главное одной линией. Строкой или столбцом зависит от конкретной задачи а соответственно и восприятия. Даже в мурзилках в одних случаях память рисуют строкой, в других столбцом.

Не по теме:

Кстати вопрос для очередного холивара: адреса памяти растут слева на право или сверху вниз? :D

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.10.2015, 14:16
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Не суть важно, главное одной линией.
суть важно что линия - не есть столбец.
это имеет значение на алгоритм обхода массива.

Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Соответственно A[i] это тоже самое что *(A+i).
работает только и только для случая,
когда линия - есть строка, а не столбец.
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.10.2015, 14:32
Цитата Сообщение от hoggy Посмотреть сообщение
суть важно что линия - не есть столбец.
это имеет значение на алгоритм обхода массива.
Поменяем размеры местами - что от этого изменится? Те же грабли с массивом массивов из одного элемента, как память не распределяй, хоть блоками хоть всем куском. Отлавливать кстати это и поворачивать массив тоже не есть гуд, потому как в математике имеет значение ориентация вектора, при умножении на матрицу. Соответственно обычно идут от разделения на классы строка, столбец и матрица.

Цитата Сообщение от hoggy Посмотреть сообщение
работает только и только для случая, когда линия - есть строка, а не столбец.
Это вообще то для одномерного массива написано коим является память. А для двумерного при равном размере массивов второго уровня A[i][j] будет *(A+i*Level2Count+j); Память линейна, соответственно координата у нее одна. А вторая и последующие добавляются членением этой линии на отрезки и перемещением для каждого элемента 2-го и выше измерения начала отсчета в начало выделенного ему отрезка.
0
 Аватар для EfesXZC
2 / 2 / 2
Регистрация: 07.08.2015
Сообщений: 72
11.10.2015, 16:52  [ТС]
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
//инициализируем табличку:
for(int i=1;i<RowCount;i++) Rows[i]=Rows[i-1]+ColCount;
Fulcrum_013, Не понимаю как работает эта часть. Похоже, что здесь расставляются указатели на начала строк. Но, допустим имеется массив mas[3][2]. Для него выделили 6 идущих подряд ячеек памяти. Получается, что указатели надо поставить на 0, 2 и 4 ячейки. С нулевой ячейкой все понятно. Со второй, в принципе, тоже: Rows[1] = Rows[1-1] + 2 =2. А вот как ставится указатель на четвертую ячейку? Ведь, Rows[2] = Rows[2-1] + 2 = 3.

Не по теме:

Похоже, что мне надо почитать про организацию памяти. Какое чтиво посоветуете?

0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
11.10.2015, 18:32
Цитата Сообщение от EfesXZC Посмотреть сообщение
Ведь, Rows[2] = Rows[2-1] + 2 = 3.
Это арифметика указателей. Слагаемое домножается компилятором на размер типа.
Т.е.
C++
1
2
3
4
5
6
char *a= (char *) 10;
int *b= (int *) 10;
double *c=(double *)10;
a++; // в результате в a будет 11;
b++;// в результате в b будет 14;
c++;// в результате в c будет 18;
Rows[2] = Rows[2-1] + 2*sizeof(Type)
т.е. при добалении/вычитании чего либо к типизированному указателю добавляете не само это число а размер такого количества ячеек этого типа.

Добавлено через 16 минут
Цитата Сообщение от EfesXZC Посмотреть сообщение
Ведь, Rows[2] = Rows[2-1] + 2 = 3
Rows[2] = Rows[2-1] + 2 = 4
Потому что на момент выполнения этой операции в Rows[1] уже записано 2 на предыдущем шаге цикла.

Добавлено через 1 минуту
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Rows[2-1] + 2 = 3
Rows[2-1] + 2 = 4. Потому что на предыдущей итерации цикла в Rows[1] записано 2

Добавлено через 49 минут

Не по теме:

Цитата Сообщение от EfesXZC Посмотреть сообщение
Не по теме:
Похоже, что мне надо почитать про организацию памяти. Какое чтиво посоветуете?
Да ничего там особого нет в организации. Набор ячеек с линейной адресацией. Во всяком случае при 32 и 64 разрядной адресации. при 16 битной немного сложнее адресация, потому что адрес состоит их базы с 16 байтовым шагом и прибавляемого к ней смещения с 1 байтным шагом, но и это прячет компилятор, позволяя работать с памятью как с линейной, разве что налагая ограничения в 64kb на размер выделяемого одним куском блока (во всяком случае в реалиях менеджера памяти ДОС), а в принципе и такие ограничения не обязательны.

1
 Аватар для EfesXZC
2 / 2 / 2
Регистрация: 07.08.2015
Сообщений: 72
13.10.2015, 09:04  [ТС]
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Теперь обращаться к элементу можно как Rows[Row][Col];
Это, конечно, хорошо, что можно так обращаться к элементу. Но что делать если создание массива заложено в конструкторе класса, а обращаться надо из функции main? Каким-то образом перегружать оператор [] ?
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
13.10.2015, 15:20
Цитата Сообщение от EfesXZC Посмотреть сообщение
Каким-то образом перегружать оператор []
оператор [] можно использовать только для обращения к одномерному массиву. Соответсвенно чтобы поиметь двумерный надо в нем вернуть указатель одномерный.
C++
1
 DataType* operator[] (int n){return Rows[i];}
[/quote]
0
 Аватар для EfesXZC
2 / 2 / 2
Регистрация: 07.08.2015
Сообщений: 72
15.10.2015, 22:23  [ТС]
И снова ступор. Пытаюсь реализовать функцию транспонирования матрицы. Точнее я ее реализовал. Для этого пришлось создать новую матрицу, а ведь старую при этом, по хорошему, надо бы тут же удалить, а не ждать пока сработает деструктор. Вот тут и возникает вновь проблема ломанувшегося в неинициализированный массив деструктора. И как следствие, вылета программы. Что делать? Это во-первых. А во-вторых как можно сделать так, чтобы возвращаемый функцией transpon массив _common_block, можно было использовать в функции getMatrix? (И правильно ли я делаю возвращение? )

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int *Matrix::transpon(){                                        //Транспонирование матрицы
 
    int R = this->colCount;
    int C = this->rowsCount;
 
    int **_common_block = new int *[R];
        for (int i = 0; i < R; ++i)
            _common_block[i] = new int [C];
 
        for (int i = 0; i < R; ++i){
            for (int j = 0; j < C; ++j){
                _common_block[i][j] = common_block[j][i];
            }
        }
 
/*
        for (int count = 0; count < rowsCount; count++)
                delete [] common_block[count];
        delete []common_block;
*/
 
                return *_common_block;
}
C++
1
2
3
4
5
6
7
8
9
void Matrix::getMatrix(){                                           //Вывод массива на экран
    for (int i = 0; i < rowsCount; ++i){
        cout << endl;
        for (int j = 0; j < colCount; ++j){
            cout << common_block[i][j] << "\t";
        }
    }
    cout << endl;
}
Добавлено через 8 минут
Ааа, блин, понял ошибку... Возвращаемая матрица является локальным объектом. Но тогда как сделать транспонирование? Я пока вижу только следующую последовательность действий: Создать копию common_block[i][j] (copy_common_block[i][j]). Удалить common_block[i][j]. Cоздать common_block[j][i]. Сделать транспонирование. Удалить copy_common_block[i][j].

Добавлено через 1 минуту
Но, не думаю, что это оптимальный вариант
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2015, 22:23

Ошибка при создании объекта
У меня есть иерархия классов: зачет, экзамен, форма отчетности. Я вроде бы все написал. Но когда я пытаюсь создать объект EXAMINATION...

Ошибка при создании объекта класса
Приветствую, форумчане! Возник вопрос при создании объекта класса String. Что самое интересное, когда пишу ту же прогу без параметров в...

Ошибка при создании объекта класса
Привет! Чтобы на протяжении всего поста было понятно о чём я говорю,в конце поста прикреплю код. Так вот, при создании объекта класса...

Undefined reference при создании объекта
Есть класс Engine и функция для его инициализации - CreateEngine при попытке создать объект с помощью Engine *engine =...

Ошибка при создании объекта класса
Здравствуйте. В коде ниже при попытке вывести код на экран возникает следующая ошибка: prog.cpp: In function 'int main()': ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru