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

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

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

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

09.04.2013, 22:52. Просмотров 347. Ответов 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();
Сидим с другом не можем понять что не так.... Объясните, кто может) будем благодарны.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2013, 22:52     Ругается на деструктор (выделял динамически память). Почему?
Посмотрите здесь:

Почему не отрабатывает деструктор? C++
C++ деструктор не может очистить память
Динамическая память (строки), деструктор C++
Деструктор класса. Как правильно очистить память? C++
Почему деструктор не работает? C++
C++ Деструктор класса. Удаление динамически выделенного массива в классе
Почему не работает деструктор? C++
Деструктор и динамическая память C++
C++ Почему не вызывается деструктор?
Почему не работает деструктор? C++
C++ Почему вызывается деструктор?
Почему указатель теряет свои значения после выхода с метода, память выделена динамически C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 3
09.04.2013, 23:15     Ругается на деструктор (выделял динамически память). Почему? #2
Gudsaf, деструктор не нужно вызывать самому, в этом и смысл: компилятор сам "подставит" его вызов.
Цитата Сообщение от Gudsaf Посмотреть сообщение
delete arr;
delete[]
Gudsaf
103 / 14 / 3
Регистрация: 29.11.2010
Сообщений: 327
09.04.2013, 23:25  [ТС]     Ругается на деструктор (выделял динамически память). Почему? #3
Цитата Сообщение от gray_fox Посмотреть сообщение
Gudsaf
delete[]
[] - перегружены.
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 3
09.04.2013, 23:32     Ругается на деструктор (выделял динамически память). Почему? #4
Gudsaf, delete[] - это отдельный оператор для освобождения памяти, выделенной new[]. Если вызываешь new - вызывай потом delete, если new[] - delete[], "мешать" нельзя. То, что operator [] в классе перегружен тут не причём.
Yandex
Объявления
09.04.2013, 23:32     Ругается на деструктор (выделял динамически память). Почему?
Ответ Создать тему
Опции темы

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