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

Зависание на деструкторе. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В одномерном массиве, состоящем из n элементов массива, вычислить минимальный элемент массива http://www.cyberforum.ru/cpp-beginners/thread113390.html
помогите
C++ графика в c помогите плиз, нужна литература по графике в c, в инете ничего толком не нашел... http://www.cyberforum.ru/cpp-beginners/thread113384.html
Где скачать MS Visual C++ ? C++
Дайте ссылку ?
C++ Н-ленточное слияние с метод сортировки
Осуществить программную реализацию сортировки информации заданного вида сбаланси-рованным N-ленточным слиянием (в оперативной памяти), используя выбранные, в соответ-ствии с вариантом, из табл. 1 алгоритм внутренней сортировки и формат исходных данных. Ключ int Запись 0 – только ключ, 1 – ключ и другие дан-ные различных типов 1, char, float Метод внутренней сортировки метод шелла
C++ Отсортировать элементы структуры по алфавиту. http://www.cyberforum.ru/cpp-beginners/thread113327.html
друзья, не подскажите как отортировать элементы структуры по алфавиту???
C++ Работа с элементами массивов Здраствуйте,форумчане! Просьба решить эти лабораторные задачи.Срочно надо: 1. Ввести массив А. в массив В перенести все элементы массива А имеющие четный индекс и нечетное значение. Массив В отсортировать по возрастанию, используя метод пузырька. 2. Ввести массивы А и В. в массив С скопировать те элементы, которые есть в массиве А, но которых нет в массиве В. Из массива А удалить все нечетные... подробнее

Показать сообщение отдельно
-Xeon-
2 / 2 / 0
Регистрация: 15.02.2010
Сообщений: 26

Зависание на деструкторе. - C++

06.04.2010, 13:55. Просмотров 718. Ответов 4
Метки (Все метки)

Всем доброго времени суток!
Проблема такая: есть класс cData в нём статический член staric int amount, при вызове конструктора увеличиваем amount на 1, в деструкторе уменьшаем на 1, получается что то вроде счётчика сущуствующих экземпляров. В другом классе cDataArray есть члены cData *data1 и cData *data2, для них сначало выделяю динамически память спомощью new, потом пытаясь удалить (delete data1) программа виснет на диструкторе. При дебаге ставлю точку останова на конце диструктора, при попытке выйти из него вылетает сообщение от дебагера "Нет исходного кода для текущего места.". В чём проблема и как можно решить?!

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
// Класс cData:
 
class cData // класс дата
{
    int     year; // год 
    short   mounth; // месяц
    short   day; // день
 
    static int amount; // количество экземпляров класса
 
public:
    cData(); // конструктор по умолчанию
    cData(int n_year, short n_mounth, short n_day); // конструктор с параметрами
    cData(const cData &obj); // конструктор копирования
    ~cData(); // деструктор
    bool SetData(int n_year, short n_mounth, short n_day); //изменение значения
    void IncDay(); // инкремент
    string GetStrData(); // возвращает дату в виде строки
    static int GetAmount(); // возвращает количество экземпляров
};
 
cData::~cData()
{
    amount--;
}
 
// Класс cDataArray:
 
class cDataArray
{
    cData *data1; 
    cData *data2;
    bool use_one; // определяет какой из указателей используется
 
public:
    cDataArray();
    cDataArray(int n_amount);
    ~cDataArray();
    void AddElement(int n_year, short n_mounth, short n_day); // добавление элемента в конец
    bool DeleteElement(int num); // удаление элемента по номеру
    bool SetData(int num, int n_year, short n_mounth, short n_day); //изменение значения
    bool IncDay(int num); // инкремент
    string GetStrData(int num); // возвращает дату в виде строки
    int GetAmount(); // возвращает количество экземпляров
};
 
 
//метод в котором удаляю
void cDataArray::AddElement(int n_year, short n_mounth, short n_day)
{
    int i, kol;
 
    if(use_one)
    {
        kol = data1[0].GetAmount();
        data2 = new cData [kol+1];
 
        for(i=0; i < kol; i++)
        {
            data2[i] = data1[i];
        }
        data2[i].SetData(n_year, n_mounth, n_day);
 
        [COLOR="#ff0000"]delete data1;[/COLOR] // тут виснет
 
        use_one = false;
    }
    else
    {
        kol = data2[0].GetAmount();
        data1 = new cData [kol+1];
 
        for(i=0; i < kol; i++)
        {
            data1[i] = data2[i];
        }
        data1[i].SetData(n_year, n_mounth, n_day);
 
        [COLOR="#ff0000"]delete data2;[/COLOR] // тут виснет
 
        use_one = true;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru