Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Gudsaf
103 / 14 / 3
Регистрация: 29.11.2010
Сообщений: 328
#1

Ругается на деструктор (выделял динамически память). Почему? - C++

09.04.2013, 22:52. Просмотров 371. Ответов 3
Метки нет (Все метки)

Вот код:
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
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
 
class MClass
{
private:
    int *arr;
    int NumOfElmts;
 
public:
    MClass()
    {
        arr = new int[0];
    }
 
    MClass(int num)
    {
        if (num <= 0)
        {
            printf("Wrong size!\nClosing programm...\n");
            exit(0);
        }
        NumOfElmts = num;
        arr = new int[NumOfElmts];
        for (int i = 0; i < NumOfElmts; ++i)
        {
            arr[i] = rand() % 300;
        }
    }
 
    ~MClass()
    {
        delete arr;
    }
    /*************************************************************************/
    int & operator [] (int i)
    {
        if (i < 0 || i >= NumOfElmts)
            exit(0);
        return arr[i];
    }
 
     MClass & operator ++ (int n)
    {
        //int c = n;
        //MClass *temp = new MClass(NumOfElmts);
        for (int i = 0; i < NumOfElmts; ++i)
        {
            printf("\nelement %d: %d", i + 1, this->arr[i]);
            this->arr[i]++;
            printf("\nelement++ %d: %d\n", i + 1, this->arr[i]);
        }
        return *this;
    }
    /*************************************************************************/
    void print_result(void)
    {
        printf("\n\noutput: ");
        for (int i = 0; i < NumOfElmts; ++i)
        {
            printf("%d ", arr[i]);
        }
        printf("\n");
    }
 
    void  get_element (int num_el)
    {
        printf("value: %d", this->arr[num_el]);
    }
};
 
int get_number2 (void)
{
    int number = 0;
    printf("input number of elements for output: ");
    scanf("%d", &number);
    return (number-1);
}
 
int get_number(void)
{
    int number = 0;
    printf("input number of elements: ");
    scanf("%d", &number);
    return number;
}
 
int main(void)
{
    srand(time(NULL));
 
    MClass arr_1(get_number());
    arr_1 = arr_1++;
    arr_1.print_result();
    arr_1.get_element(get_number2());
 
    getch();
    arr_1.~MClass();
    return 0;
}
вылетает на строке: arr_1.~MClass();
Сидим с другом не можем понять что не так.... Объясните, кто может) будем благодарны.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 22:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ругается на деструктор (выделял динамически память). Почему? (C++):

Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B - C++
Почему я делаю виртуальным деструктор A, а в таблице виртуальных функций лежит деструктор B?

Почему указатель теряет свои значения после выхода с метода, память выделена динамически - C++
#include &lt;iostream&gt; using namespace std; void sqr( int* a, int length ); int main() { int *a = new int; int length =...

Деструктор класса. Удаление динамически выделенного массива в классе - C++
First.h class First { private: int* num; int n; public: First(int a); ~First();

Деструктор и динамическая память - C++
Вечер добрый, форумчане. Создал класс с матрицами, динамически выделил память. Конструктор копии вроде правильный, деструктор тоже, но...

Динамическая память (строки), деструктор - C++
Привет. Бьюсь уже час, помогите разобраться. Написал программу, в одной функции память выделил, в другой освобождаю. После выполнения...

деструктор не может очистить память - C++
Всем привет. Ребят, проблема такая. Есть класс который предназначен для хранения двумерной матрицы. Вот: class intArr{ int** arr;...

3
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
09.04.2013, 23:15 #2
Gudsaf, деструктор не нужно вызывать самому, в этом и смысл: компилятор сам "подставит" его вызов.
Цитата Сообщение от Gudsaf Посмотреть сообщение
delete arr;
delete[]
0
Gudsaf
103 / 14 / 3
Регистрация: 29.11.2010
Сообщений: 328
09.04.2013, 23:25  [ТС] #3
Цитата Сообщение от gray_fox Посмотреть сообщение
Gudsaf
delete[]
[] - перегружены.
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
09.04.2013, 23:32 #4
Gudsaf, delete[] - это отдельный оператор для освобождения памяти, выделенной new[]. Если вызываешь new - вызывай потом delete, если new[] - delete[], "мешать" нельзя. То, что operator [] в классе перегружен тут не причём.
0
09.04.2013, 23:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 23:32
Привет! Вот еще темы с ответами:

Деструктор класса. Как правильно очистить память? - C++
Добрый день! Написал прогу бинарного дерева поиска, все работает, но нужен совет как убрать за собой, тобесь очистить память во избежания...

Почему вызывается деструктор? - C++
Доброго времени суток. Написал такой код: struct O { virtual ~O() { cout &lt;&lt; &quot;hey&quot;; } }; struct...

Почему не работает деструктор? - C++
Подскажите пожалуйста, почему у меня не работает деструктор? #include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; ...

Почему не работает деструктор? - C++
Собственно говоря, почему? #include &lt;iostream&gt; using namespace std; class Osoba{ public : char* imie; int wiek; ...


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

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

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