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

Подвисание программы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ часть программы есть нужно завершить http://www.cyberforum.ru/cpp-beginners/thread221649.html
С клавиатуры вводятся N целых чисел (для их хранения использовать двусвязный список). Вывести элементы списка, расположенные между максимальным и мини-мальным элементами. часть программы есть нужно завершить #include <stdio.h> #include <stdlib.h> struct Item { struct Item *next; struct Item *prev; int data; };
C++ Запуск функции Здравствуйте уважаемые форумчане, очень нужна ваша помощь! Есть функция void F3(double *p, double *q) { int i,n; for (i=0; p!=0; i++) http://www.cyberforum.ru/cpp-beginners/thread221636.html
Ищу код простого слияния на 4х лентах C++
очень нужет код простого слияния на 4х лентах...у кого есть прошу выложить) зарание спасибо!
C++ древо и динамические списки
нужы 2 эти программы. древо, и динамические списки
C++ Реализовать шаблон Array http://www.cyberforum.ru/cpp-beginners/thread221632.html
Срочно нужна помощь! Реализовать шаблон Array, как класс-шаблон числового массива с задаваемыми пределами индексов! Буду очень благодарен за помощь!
C++ Дана целостная матрица Дана целостная матрица i,j=1,...,n. Получить b1,...,bn, где bi - это n Σ a^2ij j=1 подробнее

Показать сообщение отдельно
Runa
131 / 83 / 3
Регистрация: 28.08.2009
Сообщений: 363

Подвисание программы - C++

28.12.2010, 07:13. Просмотров 432. Ответов 8
Метки (Все метки)

Програма для создания списка, здесь приведен минимальный код воспроизводящий ошибку.
После окончания выполнения функции main программа зависает (может быть не отрабатывает деструктор)
Если убрать вызов функции AddHead то все нормально работает
Никак не могу поймать ошибку ((
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
class Books
{
public:
    long kod;
    char* avtor;
    char* name;
    long pages;
 
public:
 
    Books()
    {
        avtor = new char[100];
        name = new char[100];
    }
    void Input()
    {
        cin >> name;
        cin >> avtor;
        cin >> kod;
        cin >> pages;
    }
 
    void Output()
    {
        cout <<"\n";
        cout <<name<<"\n";
        cout <<avtor<<"\n";
        cout <<kod<<"\n";
        cout << pages<<"\n";
    }
 
    ~Books()
    {
        delete[] avtor;
        delete[] name;
    }
};
//
struct Elem
{
   Books data;
   Elem* next, * prev;
};
//
class List
{
   Elem* Head, * Tail;
   int Count;
public:
   List()
   {
       Head = Tail = 0;
       Count = 0;
   }
 
   ~List()
   {
       DelAll();
   }
 
   int GetCount()
   {
       return Count;
   }
 
   void DelAll()
   {
       while(Count != 0)
            Del(1);
   }
 
   void Del(int n)
   {
       
       int i = 1;
       Elem * Del = Head;   
       while(i < n)
       {
          Del = Del->next;
          i++;
       }
       Elem * PrevDel = Del->prev;
       Elem * AfterDel = Del->next;
       if(PrevDel != 0 && Count != 1)
          PrevDel->next = AfterDel; 
       if(AfterDel != 0 && Count != 1)
          AfterDel->prev = PrevDel;
       if(n == 1)
          Head = AfterDel;
       if(n == Count)
          Tail = PrevDel;
       delete Del;
       Count--;
   }
 
   void AddHead(Books n)
   {
       Elem * temp = new Elem;
       temp->prev = 0;
       for(int i = 0; i<10; i++)
            temp->data.avtor[i] = n.avtor[i];
       for(int i = 0; i<10; i++)
            temp->data.name[i] = n.name[i];
       temp->data.kod = n.kod;
       temp->data.pages = n.pages;
       temp->next = Head;
       if(Head != 0)
          Head->prev = temp;
       if(Count == 0)
          Head = Tail = temp;
       else
          Head = temp;
       Count++;
   }
  
};
 
int _tmain(int argc, _TCHAR* argv[])
{
 
    setlocale( LC_ALL,"Russian" );
 
    List L;
    Books b(10,10);
    b.Input();
    L.AddHead(b);
 
    L.DelAll();
    getch();
    return 0;
}
Добавлено через 1 час 15 минут
если написать вот так
C++
1
2
3
4
5
6
7
8
List L;
 
{
    Books b(100,100);
    b.Input();
    // добавление элемента в начало списка
    L.AddHead(b);
}
то на закрывающей фигурной скобке он и повисает, следовательно зависает на удалении объекта b
но почему?

Добавлено через 57 минут
не поняла почему, но проблема решилась
созданием динамического объекта вместо статического
C++
1
2
3
4
       Books *b;
    b = new Books(100,100);
    b->Input();
    L.AddHead(*b);
Может быть кто-нибудь знает почему так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru