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

Двусвязные списки, найти ошибку в коде - C++

Восстановить пароль Регистрация
 
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
15.07.2010, 12:32     Двусвязные списки, найти ошибку в коде #1
Помогите найти ошибку в коде, двусвязные списки. Программа работает, но выскакивает ошибка на деструкторе, в котором прописано удаление списка, не могу понять в чем ошибка, помогите пожалуйста.

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
#include<iostream>
#include<time.h>
using namespace std;
 
template <typename T>
struct Elem
{
   T *mass;
   int ramzer;
   int size;
   int grow;
   Elem * next, * prev;
};
template <typename T>
class Array
{
   Elem<T> * Head, * Hvost;
   int count;
   int grow;
   int size;
public:
   Array();
   ~Array();
   void ShowAll();
   void DellSpis();
   void AddHead();
   void AddHvost();
   void SetSize(int size, int grow);
};
template<typename T>
Array<T>::Array()
{
    Elem<T> *temp=new Elem<T>;
    Head=Hvost=NULL;
    count=0;
    grow=1;
    size=0;
}
template<typename T>
Array<T>::~Array()
{
    while(count!=0)
    {
        DellSpis();
            count--;
    }
}
template<typename T>
void Array<T>::DellSpis()
{
    Elem<T> *temp=Head;
    Elem<T> *pDel=temp->prev;
    Elem<T> *aDel=temp->next;
    if(pDel!=0&&count!=1)
        pDel=aDel;
    if(aDel!=0&&count!=1)
        aDel=pDel;
    Head=aDel;
    delete[]temp->mass;
    delete temp;
 
}
template<typename T>
void Array<T>::AddHead()
{
    Elem<T> *temp=new Elem<T>;
    temp->grow=grow;
    temp->size=size;
    temp->mass=new T[temp->grow];
    temp->prev=0;
    for(int i=0;i<size;i++)
        temp->mass[i]=rand()%20;
    temp->next = Head;
    if(Head != 0)
      Head->prev = temp;
    if(count==0)
        Head=Hvost=temp;
    Hvost=temp;
    count++;
}
template<typename T>
void Array<T>::AddHvost()
{
    Elem<T> *temp=new Elem<T>;
    temp->grow=grow;
    temp->size=size;
    temp->mass=new T[temp->grow];
    temp->next=0;
    temp->prev=Hvost;
    for(int i=0;i<size;i++)
        temp->mass[i]=rand()%20;
    if(Hvost != 0)
      Hvost->next = temp;
    if(count==0)
        Head=Hvost=temp;
    Hvost=temp;
    count++;
}
template<typename T>
void Array<T>::ShowAll()
{
    Elem<T> *temp=new Elem<T>;
    temp=Head;
    while(temp!=0)
    {
    for(int i=0;i<temp->size;i++)
        cout<<temp->mass[i]<<" ";
        cout<<endl;
        temp=temp->next;
    }
 
 
}
template<typename T>
void Array<T>::SetSize(int size, int grow)
{
    this->size=size;
    while(size>grow){
        grow+=5;
    }
    this->grow=grow;
}
void main()
{
    setlocale(LC_CTYPE,"Rus");
    Array <int> List;
    List.SetSize(5,10);
    for(int i=0;i<5;i++)
        List.AddHvost();
    List.ShowAll();
}
Добавлено через 3 часа 18 минут
кто нибудь помогите найти ошибки в коде, пожалуйста

Добавлено через 13 часов 1 минуту
пробовал так:
C++
1
2
3
4
5
6
7
8
template<typename T>
void Array<T>::DellSpis()
{
    Elem<T> *temp=Head;
    Head=temp->next;
    delete[]temp->mass;
    delete temp;
}
та же ошибка вылазит

Добавлено через 1 минуту
по дебагеру вылетает ошибка в этой строке:
C++
1
delete[]temp->mass;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2010, 12:32     Двусвязные списки, найти ошибку в коде
Посмотрите здесь:

ДВУСВЯЗНЫЕ СПИСКИ C++
C++ ДВУСВЯЗНЫЕ СПИСКИ!!!
двусвязные списки C++
Двусвязные списки C++
C++ Списки и файлы. Вывести на экран только предложения, содержащие слово которое ввели с клавиатуры (найти ошибку в коде)
C++ двусвязные списки. Исправить ошибку в коде
Двусвязные списки в с++ C++
Списки: найти ошибку в коде C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hypafrag
 Аватар для Hypafrag
25 / 24 / 1
Регистрация: 19.03.2010
Сообщений: 57
15.07.2010, 13:14     Двусвязные списки, найти ошибку в коде #2
Первый вариант у меня там-же вылетает, а вот вариант с
C++
1
2
3
4
5
6
7
8
template<typename T>
void Array<T>::DellSpis()
{
        Elem<T> *temp=Head;
        Head=temp->next;
        delete[]temp->mass;
        delete temp;
}
работает отлично. Возможно поможет пересборка с очисткой.
Компилировал я, кстати, g++, для чего void main менял на int main и подключал stdlib.h
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
15.07.2010, 16:23  [ТС]     Двусвязные списки, найти ошибку в коде #3
Hypafrag, второй раз мне советуют такой вариант, но он почему то не работает, не пойму почему

Добавлено через 2 часа 22 минуты
проблема оказалась в другом методе класса, вопрос закрыт всем спасибо!
Yandex
Объявления
15.07.2010, 16:23     Двусвязные списки, найти ошибку в коде
Ответ Создать тему
Опции темы

Текущее время: 08:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru