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

Зависает и закрывается консоль - C++

Восстановить пароль Регистрация
 
eisenheim
 Аватар для eisenheim
18 / 8 / 1
Регистрация: 06.06.2011
Сообщений: 268
30.03.2013, 21:35     Зависает и закрывается консоль #1
Добрый день! Делаю лабораторную по ООП. Задание - разряженный полином, с динамической структурой, где хранятся не нулевые коэффициенты.
Вот часть кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct znach {
    int n;
    int step;
    znach *next;
};
 
class Pol {
    int razm;
    znach *first;
public:
    Pol(Pol& b) {
        razm = b.razm;
        znach *t = new znach;
        t = first;
        znach *tb = new znach;
        tb = b.first;
        while(tb!=NULL) {
            t->n = tb->n;
            t->step = tb->step;
            tb = tb->next;
        }
    }
Виснет при вызове копирующего конструктора, а именно виснут начинает, когда доходит до while
В чём может быть проблема?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,164
Завершенные тесты: 2
30.03.2013, 21:54     Зависает и закрывается консоль #2
C++
1
tb!=NULL
а tb в NULL обратиться может?
zss
Модератор
Эксперт С++
 Аватар для zss
6055 / 5658 / 1828
Регистрация: 18.12.2011
Сообщений: 14,451
Завершенные тесты: 1
30.03.2013, 22:16     Зависает и закрывается консоль #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Pol(Pol& b) 
    {
        razm = b.razm;
        znach* tb = b.first;
        znach *t = new znach; // создали новое значение в копии
        first=t; // запомнили адрес первого
        while(tb!=NULL) 
        {
            t->n = tb->n; // скопировали данные
            t->step = tb->step;
            tb = tb->next;  // перешли к следующему в оригинале
            if(tb==NULL) // следующего нет
            {
                t->next=NULL; 
                break;
            }
            znach *t2 = new znach; // создали следующий в копии
            t->next=t2; // записали адрес следующего
            t=t2; // сделали его текущим
       }
    }
eisenheim
 Аватар для eisenheim
18 / 8 / 1
Регистрация: 06.06.2011
Сообщений: 268
01.04.2013, 14:34  [ТС]     Зависает и закрывается консоль #4
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Pol(Pol& b) 
    {
        razm = b.razm;
        znach* tb = b.first;
        znach *t = new znach; // создали новое значение в копии
        first=t; // запомнили адрес первого
        while(tb!=NULL) 
        {
            t->n = tb->n; // скопировали данные
            t->step = tb->step;
            tb = tb->next;  // перешли к следующему в оригинале
            if(tb==NULL) // следующего нет
            {
                t->next=NULL; 
                break;
            }
            znach *t2 = new znach; // создали следующий в копии
            t->next=t2; // записали адрес следующего
            t=t2; // сделали его текущим
       }
    }
Всё равно крашится.
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
01.04.2013, 14:58     Зависает и закрывается консоль #5
eisenheim, кинь весь код.
zss
Модератор
Эксперт С++
 Аватар для zss
6055 / 5658 / 1828
Регистрация: 18.12.2011
Сообщений: 14,451
Завершенные тесты: 1
01.04.2013, 18:56     Зависает и закрывается консоль #6
Цитата Сообщение от SERUYBKR Посмотреть сообщение
кинь весь код.
Это Вам нужно кинуть весь код.
Я лишь предложил правильный копиконструктор.
Иного кода у меня нет.
eisenheim
 Аватар для eisenheim
18 / 8 / 1
Регистрация: 06.06.2011
Сообщений: 268
01.04.2013, 20:14  [ТС]     Зависает и закрывается консоль #7
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
// Polinom.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
struct znach {
    int n;
    int step;
    znach *next;
};
 
class Pol {
private:
    int razm;
    znach *first;
public:
    Pol() {
        razm = 0;
        znach *t = new znach;
        t->n = 0;
        t->step = 0;
        t->next = first;
        first = t;
    }
 
    Pol(int a) {
        razm = a;
        cout<<"Введите коэффициенты полинома:\n";
        int x;
        for(int i=0;i<razm;i++) {
            cout<<"Коэффициент x при степени "<<i<<": ";
            cin>>x;
            Add(x, i);
            cout<<"\n";
        }
    }
 
    Pol(Pol& b) {
        razm = b.razm;
        znach *t = new znach;
        first = t;
        znach *tb = new znach;
        tb = b.first;
        while(tb!=NULL) {
            t->n = tb->n;
            t->step = tb->step;
            tb = tb->next;
            if(tb == NULL) {
                t->next = NULL;
                break;
            }
            t = t->next;
        }
    }
 
/*сложение, вычитание, сравнение двух полиномов, умножение и сложение с 
полиномом целого числа, вычисление значения полинома для заданного значения переменной*/
    bool InStep(int a) {
        znach *temp = first;
        while(temp!=NULL) {
            if(temp->step == a) return true;
            temp = temp->next;
        }
        return false;
    }
 
    bool In(int ch, int st) {
        znach *temp = first;
        while(temp!=NULL) {
            if(temp->step == st && temp->n == ch) return true;
            else temp = temp->next;
        }
        return false;
    }
 
    void Add(int ch, int st) {
        if(!InStep(st) && ch != 0) {
            znach *temp = new znach;
            temp->n = ch;
            temp->step = st;
            temp->next = first;
            first = temp;
        } else return;
    }
 
 
    friend istream& operator>>(istream& input, Pol& b) {
        int x;
        cout<<"Введите размерность: \n";
        cin>>b.razm;
        cout<<"Введите коэффициенты полинома:\n";
        for(int i=0;i<b.razm;i++) {
            cout<<"Коэффициент x при степени "<<i<<": ";
            cin>>x;
            b.Add(x, i);
            cout<<"\n";
        }
        return input;
    }
    
    void Print() {
        znach *t = new znach;
        t = first;
        cout<<"\n";
        char* znak;
        while(t!=NULL)
        {
            if(t->next != NULL) znak = " + ";
            else znak = "";
            cout<<t->n<<"(x^"<<t->step<<")"<<znak;
            t = t->next;
        }
        cout<<"\n\n";
    }
 
    friend ostream& operator<<(ostream& output, Pol& b) {
        znach *t = new znach;
        t = b.first;
        cout<<"\n";
        char* znak;
        while(t!=NULL)
        {
            if(t->next != NULL) znak = " + ";
            else znak = "";
            cout<<t->n<<"(x^"<<t->step<<")"<<znak;
            t = t->next;
        }
        cout<<"\n\n";
        return output;
    }
 
    Pol& operator*(int a) {
        znach *t = new znach;
        t = first;
        while(t!=NULL) {
            t->n = t->n * a;
            t = t->next;
        }
 
        return *this;
    }
 
    bool operator==(Pol& b) {
        znach *t = new znach;
        t = first;
        while(t!=NULL) {
            if(!b.In(t->n, t->step)) return false;
            else t = t->next;
        }
        return true;
    }
 
};
 
 
int _tmain(int argc, _TCHAR *argv[])
{
    setlocale(LC_ALL, "Russian");
    Pol a;
    cin>>a;
    Pol b(a);
    //Pol b;
    //cin>>b;
    cout<<a;
    cout<<b;
    if(a==b) cout<<"Равны";
    else cout<<"Не равны";
    a*2;
    cout<<a<<"\n\n";
    return 0;
}
zss
Модератор
Эксперт С++
 Аватар для zss
6055 / 5658 / 1828
Регистрация: 18.12.2011
Сообщений: 14,451
Завершенные тесты: 1
01.04.2013, 21:58     Зависает и закрывается консоль #8
C++
1
2
3
4
5
6
7
8
Pol() {
        razm = 0;
        znach *t = new znach;
        t->n = 0;
        t->step = 0;
        t->next = 0;
        first = t;
    }
А у Вас было написано
t->next = first;
т.е. следующий получался первый,
а первый - сдедующим.
Вот Вам и зацикливание.
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
01.04.2013, 23:45     Зависает и закрывается консоль #9
Цитата Сообщение от zss Посмотреть сообщение
Это Вам нужно кинуть весь код.
Я лишь предложил правильный копиконструктор.
Иного кода у меня нет.
лол. Я же не тебе писал. Ты чего?
eisenheim
 Аватар для eisenheim
18 / 8 / 1
Регистрация: 06.06.2011
Сообщений: 268
02.04.2013, 02:48  [ТС]     Зависает и закрывается консоль #10
У меня крашится при вызове копирующего конструктора! С констр. по умолчанию всё нормально работает
zss
Модератор
Эксперт С++
 Аватар для zss
6055 / 5658 / 1828
Регистрация: 18.12.2011
Сообщений: 14,451
Завершенные тесты: 1
02.04.2013, 07:49     Зависает и закрывается консоль #11
В функции Add() та же ошибка
temp->next = first;
Указатель адресует первый элемент.
т.е. следующий получался первый,
а первый - следующим.
Вот Вам и зацикливание.
eisenheim
 Аватар для eisenheim
18 / 8 / 1
Регистрация: 06.06.2011
Сообщений: 268
02.04.2013, 10:34  [ТС]     Зависает и закрывается консоль #12
Цитата Сообщение от zss Посмотреть сообщение
В функции Add() та же ошибка
temp->next = first;
Указатель адресует первый элемент.
т.е. следующий получался первый,
а первый - следующим.
Вот Вам и зацикливание.
А помоему всё правильно!
Посмотрите вложенную картинку
Миниатюры
Зависает и закрывается консоль  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2013, 21:35     Зависает и закрывается консоль
Еще ссылки по теме:

Консоль закрывается после выполнения программы C++
Консоль закрывается, не выдав результата C++
C++ Закрывается консоль
Почему при запуске программы консоль (среда Eclipse C++) сразу закрывается? C++
C++ Закрывается консоль сразу после вывода результата

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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
 Аватар для zss
6055 / 5658 / 1828
Регистрация: 18.12.2011
Сообщений: 14,451
Завершенные тесты: 1
02.04.2013, 21:35     Зависает и закрывается консоль #13
Поставьте в режиме отладчика в это место останов и по шагам пройдитесь дальше.
Сразу увидите, что происходит.
Yandex
Объявления
02.04.2013, 21:35     Зависает и закрывается консоль
Ответ Создать тему
Опции темы

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