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

Классы - ошибка в деструкторе - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Зацикливается make (makefile) http://www.cyberforum.ru/cpp-beginners/thread817225.html
Решил освоить makefile Создаю простейшую программу, состоящую из единственного файла main.cpp Создаю makefile (makefile): all: g++ main.cpp -o test Создаю батник: make
C++ Дано предложение. Напечатать все различные слова Здравствуйте уважаемые форумчане. Дано предложение. Напечатать все различные слова... Как тут быть, какие идеи..? http://www.cyberforum.ru/cpp-beginners/thread817221.html
STL бинарное дерево C++
Доброго времени суток!:) Изучаю STL, пока поверхностно прошелся по контейнерам, но не встретил деревьев... хотя set, multiset, map и multimap реализованы на основе бинарных деревьев... и у меня возник вопрос, каким образом можно реализовать бинарное дерево с помощью STL, не каждый раз же вручную писать.... Заранее спасибо!:)
C++ Что выполняется быстрее?
Что выполняется быстрее (в первом случае идет вычисление адреса элемента массива, а во втором вычисляется сам элемент, причем известно что обязательно вычитание)?. Есть ли способы сделать это быстрее? Случай 1: mas = mas2; Случай 2: mas = i - j;
C++ Сокращение дроби http://www.cyberforum.ru/cpp-beginners/thread817187.html
Есть класс дроби с полями Чисельник и Знаменник. надо написать функцию сокращение дроби. сделать функцию дружественной и т.п. я умею, мне надо просто саму ф-цию сокращения, ну или ее алгоритм.
C++ (7,3):Declaration syntax error Помогите исправить ошибку #include <stdio.h> #include <conio.h> main() { int a,b; int Cube (int n) { return n*n*n; } подробнее

Показать сообщение отдельно
Hunter13ua
46 / 46 / 5
Регистрация: 25.10.2011
Сообщений: 183
24.03.2013, 19:29  [ТС]     Классы - ошибка в деструкторе
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
#include <stdio.h>
#include <stdlib.h>
#include "LongNumbers.cpp"
int main(int argc, char* argv[])
{
        LongNum A; LongNum B;
        A.Readln(); B.Readln();
        A=B;
        A.Write(A.Head);
        printf("\n");
        system("pause");
        return 0;
}
//---------------------------------------------------------------------------
LongNumbers.cpp
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
#include "LongNumbers.h"
#include <stdio.h>
#include <alloc.h>
#include <string.h>
 
#define max( a, b ) ( (a < b) ? a : b )
 
LongNum::LongNum()
{
        this->Head = (LongNum*) malloc(sizeof(LongNum));
        this->Head->data = NULL;
        this->Head->next = NULL;
}
 
LongNum::~LongNum()
{
        LongNum *temp1 = this->Head;
        LongNum *temp2;
        while ( temp1 != NULL )
        {
                temp2 = temp1;
                temp1 = temp1->next;
                free(temp2);
        }
}
 
void LongNum::add_list(char d)
{
        LongNum* temp1 = this->Head;
        LongNum* temp2 = (LongNum*) malloc(sizeof(LongNum));
        temp2->data = d;
        temp2->next = NULL;
        if ( this->Head == NULL )
                this->Head = temp2;
        else
        {
                while ( temp1->next != NULL)
                        temp1 = temp1->next;
                temp1->next = temp2;
        }
}
 
void LongNum::Readln()
{
        char * string = new char [255];
        gets(string);
        size_t len = strlen(string);
        for(int i=len-1; i>=0; i--)
        {
                this->add_list(string[i]);
        }
}
 
size_t LongNum::GetSize()
{
        size_t size = 0;
        LongNum *temp = this->Head;
        if ( temp != NULL )
                size++;
        while ( temp->next != NULL )
        {
                size++;
                temp = temp->next;
        }
        return size;
}
 
void LongNum::Write(LongNum *head)
{
        if ( head != NULL )
        {
                if ( head->next != NULL )
                        LongNum::Write(head->next);
                printf("%c",head->data);
        }
}
 
void LongNum::Normalize()
{
        LongNum *temp = this->Head;
        if ( this->Head != NULL )
                if ( (this->Head->next == NULL) && ( this->Head->data == '0' ) )
                {
                        this->~LongNum();
                        puts("Normalization completed. Number was empty. Deleted.");
                }
        LongNum *pos = NULL;
        while ( temp->next != NULL )
        {
                if ( (temp->next->data == '0') && (pos == NULL) )
                        pos = temp;
                if ( temp->next->data != '0' ) pos = NULL;
                temp = temp->next;
        }
        if ( pos != NULL )
        {
                temp = pos->next;
                pos->next = NULL;
                pos = temp;
        }
        while ( pos != NULL )
        {
                temp = pos;
                pos = pos->next;
                free(temp);
        }
        printf("Normalization done.\n");
}
 
bool LongNum::check()
{
        LongNum *temp = this->Head;
        bool flag = false;
        while (temp->next != NULL)
        {
                if (temp->data != '0') flag = true;
                temp = temp->next;
        }
        return flag;
}
 
void LongNum::operator=(LongNum *A)
{
        LongNum *temp1 = this->Head;
        LongNum *temp2;
        while ( temp1->next != NULL )
        {
                temp2 = temp1;
                temp1 = temp1->next;
                free(temp2);
        }
        if (temp1 != NULL)
                free(temp1);
        this->Head = NULL;
 
        temp1 = A->Head;
        while ( temp1 != NULL )
        {
                this->add_list(temp1->data);
        }
}
//---------------------------------------------------------------------------
#pragma package(smart_init)

LongNumbers.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//---------------------------------------------------------------------------
 
#ifndef LongNumbersH
#define LongNumbersH
#include <stddef.h>
class LongNum {
        private:
                char data;
                LongNum *next;
                void add_list(char d);
        public:
                LongNum *Head;
                LongNum();
                ~LongNum();
                void Readln();
                size_t GetSize();
                void Write(LongNum *head);
                void Normalize();
                bool check();
                void operator=(LongNum *A);
};
//---------------------------------------------------------------------------
#endif
 
Текущее время: 22:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru