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

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

Войти
Регистрация
Восстановить пароль
 
Crudelis
Шаровик затейник
676 / 418 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
#1

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

15.07.2010, 12:32. Просмотров 412. Ответов 2
Метки нет (Все метки)

Помогите найти ошибку в коде, двусвязные списки. Программа работает, но выскакивает ошибка на деструкторе, в котором прописано удаление списка, не могу понять в чем ошибка, помогите пожалуйста.

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;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2010, 12:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двусвязные списки, найти ошибку в коде (C++):

двусвязные списки. Исправить ошибку в коде - C++
Вводится последовательность чисел, и затем, когда встречается первое простое число - оно удаляется. Всё как бы хорошо, но единственный...

Списки: найти ошибку в коде - C++
Списки. Пытаюсь их инициализировать. Для этого создал функцию. На вход её да. указаель на предыдущий элемент и новый. Но предыдущий...

Списки и файлы. Вывести на экран только предложения, содержащие слово которое ввели с клавиатуры (найти ошибку в коде) - C++
Ребята привет, мне посоветовали этот форум, как помощь для начинающих программистов. Буду очень признательна, если поможете исправить...

двусвязные списки - C++
привет всем. Помогите пожалуйста написать функции очистки списка и добавление елемента в начало списка. Заранее спасибо.

Двусвязные списки - C++
Добрый день) имеется задание: Необходимо реализовать список сотрудников, работающих на предприятии. Сведения о сотрудниках содержатся...

Двусвязные списки - C++
Сформировать двусвязный список и выполнить: Структура содержит фамилию и 4 оценки. Удалить из списка неуспевающих. Наррооод!!! Спасите,...

2
Hypafrag
26 / 25 / 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
0
Crudelis
Шаровик затейник
676 / 418 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
15.07.2010, 16:23  [ТС] #3
Hypafrag, второй раз мне советуют такой вариант, но он почему то не работает, не пойму почему

Добавлено через 2 часа 22 минуты
проблема оказалась в другом методе класса, вопрос закрыт всем спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2010, 16:23
Привет! Вот еще темы с ответами:

ДВУСВЯЗНЫЕ СПИСКИ - C++
Написал программу,а она не запускается. И ошибок не выдает. Подскажите пожайлуста что не так сделал. Разработать программу для...

ДВУСВЯЗНЫЕ СПИСКИ!!! - C++
Доброго времени суток... покажите пожалуйста примеры на организацию двусвязных списков, их удаление, редактирование, поиск нужного...

Двусвязные списки в с++ - C++
Помогите пожалуйста, отредактировать ошибки в данной программе. Я недостаточно хорошо разбираюсь в объявлении глобальных и локальных...

Шаблонные двусвязные списки. - C++
Два велосипеда из закрома ов родина. Не пропадать же добру. А поделюсь -- так может какой студиозус найдет и порадуется. #include...


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

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

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