Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
eisenheim
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
1

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

30.03.2013, 21:35. Просмотров 623. Ответов 12
Метки нет (Все метки)

Добрый день! Делаю лабораторную по ООП. Задание - разряженный полином, с динамической структурой, где хранятся не нулевые коэффициенты.
Вот часть кода:
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
В чём может быть проблема?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2013, 21:35
Ответы с готовыми решениями:

Закрывается консоль
Здравствуйте! У меня такая проблема: делал программу по переводу галлонов в литры, но после...

Закрывается консоль
#include <iostream> using namespace std; int main() { double g, f; cout << "vvedit chislo...

Консоль закрывается, не выдав результата
У меня есть 2 кода, нужно сделать третий, из которого можно было бы открывать первые два. Что-то...

Консоль открывается и мгновенно закрывается
Написал программу в visual studio 2017 community, #include "stdafx.h" #include<iostream>...

Консоль открывается и сразу закрывается
консоль открывается и сразу закрывается. C++?? я решил эту проблему вот так #include "stdafx.h"...

12
Кудаив
412 / 411 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
30.03.2013, 21:54 2
C++
1
tb!=NULL
а tb в NULL обратиться может?
0
zss
Модератор
Эксперт С++
8070 / 7213 / 4496
Регистрация: 18.12.2011
Сообщений: 19,078
Завершенные тесты: 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; // сделали его текущим
       }
    }
0
eisenheim
18 / 8 / 2
Регистрация: 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; // сделали его текущим
       }
    }
Всё равно крашится.
0
01.04.2013, 14:34
xSCJx
22 / 19 / 6
Регистрация: 24.12.2012
Сообщений: 435
01.04.2013, 14:58 5
eisenheim, кинь весь код.
0
zss
Модератор
Эксперт С++
8070 / 7213 / 4496
Регистрация: 18.12.2011
Сообщений: 19,078
Завершенные тесты: 1
01.04.2013, 18:56 6
Цитата Сообщение от SERUYBKR Посмотреть сообщение
кинь весь код.
Это Вам нужно кинуть весь код.
Я лишь предложил правильный копиконструктор.
Иного кода у меня нет.
0
eisenheim
18 / 8 / 2
Регистрация: 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;
}
0
zss
Модератор
Эксперт С++
8070 / 7213 / 4496
Регистрация: 18.12.2011
Сообщений: 19,078
Завершенные тесты: 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;
т.е. следующий получался первый,
а первый - сдедующим.
Вот Вам и зацикливание.
0
xSCJx
22 / 19 / 6
Регистрация: 24.12.2012
Сообщений: 435
01.04.2013, 23:45 9
Цитата Сообщение от zss Посмотреть сообщение
Это Вам нужно кинуть весь код.
Я лишь предложил правильный копиконструктор.
Иного кода у меня нет.
лол. Я же не тебе писал. Ты чего?
1
eisenheim
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
02.04.2013, 02:48  [ТС] 10
У меня крашится при вызове копирующего конструктора! С констр. по умолчанию всё нормально работает
0
zss
Модератор
Эксперт С++
8070 / 7213 / 4496
Регистрация: 18.12.2011
Сообщений: 19,078
Завершенные тесты: 1
02.04.2013, 07:49 11
В функции Add() та же ошибка
temp->next = first;
Указатель адресует первый элемент.
т.е. следующий получался первый,
а первый - следующим.
Вот Вам и зацикливание.
1
eisenheim
18 / 8 / 2
Регистрация: 06.06.2011
Сообщений: 268
02.04.2013, 10:34  [ТС] 12
Цитата Сообщение от zss Посмотреть сообщение
В функции Add() та же ошибка
temp->next = first;
Указатель адресует первый элемент.
т.е. следующий получался первый,
а первый - следующим.
Вот Вам и зацикливание.
А помоему всё правильно!
Посмотрите вложенную картинку
0
Миниатюры
Зависает и закрывается консоль  
zss
Модератор
Эксперт С++
8070 / 7213 / 4496
Регистрация: 18.12.2011
Сообщений: 19,078
Завершенные тесты: 1
02.04.2013, 21:35 13
Поставьте в режиме отладчика в это место останов и по шагам пройдитесь дальше.
Сразу увидите, что происходит.
0
02.04.2013, 21:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2013, 21:35

Консоль закрывается после выполнения программы
Всем привет, такая проблема, после выполнения программы окно консоли закрывается. Как можно...

Консоль закрывается после перехода в функцию
После выполнения функции main консоль закрывается, в чем ошибка? int _tmain(int argc, _TCHAR*...

Консоль закрывается в процессе выполнения программы - С++
В Visual Studio в процессе выполнения программы и в процессе работы закрывается через какое- то...


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

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

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