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

Сбиваются указатели при переходе между функциями - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перевести дробное число, заданного в двоичной системе счисления, в шестнадцатеричную http://www.cyberforum.ru/cpp-beginners/thread1491733.html
Дано дробное число в двоичной системе счисления, т.е. последовательность цифр 0 и 1, разделенных точкой. Составить программу перевода этого числа в шестнадцатеричную систему счисления.
C++ Как убрать округление? Доброго времени суток. Компилятор Dev-c++ выдает при делении целое вместо дробного. Пробовал setf, usetf, precision. Чёта не получается блин. Помогите набраться опыта неофиту! Заранее спасибо. #include <iostream> int main() { int x = 1; int y = 10; http://www.cyberforum.ru/cpp-beginners/thread1491717.html
Как вывести элементы вектора, являющиеся членами класса? C++
#include <iostream> #include <vector> #include <cstdio> using namespace std; typedef struct moment{ int h,m,s; }moment; int main()
C++ Файл, данные из столбца в строку
суть есть файл, в нем записи о людях, нужно перевести записи из столбца в строку и наверное убрать лишние символы, считать началом строки "(((" концом ")))" вдруг есть у кого что нить подобное или кто может помочь. делов как я понял на пару минут. признак выгрузки=1 -------------------------------------------------------------------------- (((ОК ...
C++ Вывести числа в цикле http://www.cyberforum.ru/cpp-beginners/thread1491706.html
Написать простую программу с использованием цикла for
C++ Даны три строки: S1, S2, S3. Заменить в строке S1 первое вхождение строки S2 на S3 Даны три строки: S1, S2, S3. Заменить в строке S1 первое вхождение строки S2 на S3. подробнее

Показать сообщение отдельно
Керра
Модератор
 Аватар для Керра
1271 / 439 / 45
Регистрация: 24.08.2011
Сообщений: 2,127
02.07.2015, 13:01     Сбиваются указатели при переходе между функциями
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#include <iostream>
#include <Windows.h>
using namespace std;
 
class Polynom
{
public:
    Polynom(int power_ = 0, float *koef_ = NULL);
    Polynom(Polynom &right);
    ~Polynom();
 
    float& operator[](int idx);
    int Power();
    void SetPower(int power_);
    
    Polynom& operator=(Polynom &right);
    Polynom& operator-();
    Polynom& operator+=(Polynom &right);
    Polynom& operator-=(Polynom &right);
    Polynom& operator*=(Polynom &right);
    Polynom& operator+(Polynom &right);
    Polynom& operator-(Polynom &right);
    Polynom& operator*(Polynom &right);
 
    bool operator==(Polynom &right);
    bool operator!=(Polynom &right);
    bool operator>(Polynom &right);
    bool operator<(Polynom &right);
    bool operator>=(Polynom &right);
    bool operator<=(Polynom &right);
private:
    int power;
    float *koef;
};
 
Polynom::Polynom(int power_, float *koef_)
{
    power = power_;
    koef = new float[power+1];
    if (koef_ != NULL)
        for (int i = 0; i <= power; i++)
            koef[i] = koef_[i];
    else
        for (int i = 0; i <= power; i++)
            koef[i] = 0;
}
 
Polynom::Polynom(Polynom &right)
{
    koef = new float[1];
    *this = right;
}
 
Polynom::~Polynom()
{
    delete [] koef;
}
 
float& Polynom::operator[](int idx)
{
    if (idx < power && idx >= 0)
        return koef[idx];
    else
        return koef[power-1];
}
 
int Polynom::Power()
{
    return power;
}
 
void Polynom::SetPower(int power_)
{
    float *newkoef = new float[power_+1];
    int minpower = (power < power_? power : power_);
    for (int i = 0; i <= minpower; i++)
        newkoef[i] = koef[i];
    power = power_;
    delete [] koef;
    koef = newkoef;
}
 
ostream& operator<<(ostream &out, Polynom &p)
{
    for (int i = p.Power(); i > 0; i--)
        out << (p[i] >= 0? (i != p.Power()? " + " : "") : " - ") << abs(p[i]) << "*x^" << i;
    out << (p[0] >= 0? " + " : " - ") << p[0];
    return out;
}
 
istream& operator>>(istream &in, Polynom &p)
{
    int power;
    cout << "Введите степень многочлена: ";
    in >> power;
    p.SetPower(power);
    cout << "Введите коэффициенты при степенях от меньшей степени к большей: ";
    for (int i = 0; i <= power; i++)
        in >> p[i];
    cout << "Многочлен сохранен!\n";
    return in;
}
 
Polynom& Polynom::operator=(Polynom &right)
{
    delete [] koef;
    power = right.power;
    koef = new float[power+1];
    for (int i = 0; i <= power; i++)
        koef[i] = right[i];
    return *this;
}
 
Polynom& Polynom::operator-()
{
    Polynom res(*this);
    for (int i = 0; i <= power; i++)
        res[i] = -res[i];
    return res;
}
 
Polynom& Polynom::operator+=(Polynom &right)
{
    if (right.power > power)
    {
        float *newkoef = new float[right.power+1];
        for (int i = 0; i <= right.power; i++)
            newkoef[i] = (i <= right.power? koef[i] : 0);
        *this = Polynom(right.power, newkoef);
    }
    else
        for (int i = 0; i <= right.power; i++)
            koef[i] += right[i];
    return *this;
}
 
Polynom& Polynom::operator-=(Polynom &right)
{
    return *this += -right;
}
 
Polynom& Polynom::operator*=(Polynom &right)
{
    Polynom res(power + right.power);
    for (int i = 0; i <= power; i++)
        for (int j = 0; j <= right.power; j++)
            res[i+j] += koef[i]*right[j];
    *this = res;
    return *this;
}
 
Polynom& Polynom::operator+(Polynom &right)
{
    return (Polynom() += *this) += right;
}
 
Polynom& Polynom::operator-(Polynom &right)
{
    return (Polynom() -= *this) -= right;
}
 
Polynom& Polynom::operator*(Polynom &right)
{
    return (Polynom() *= *this) *= right;
}
 
bool Polynom::operator==(Polynom &right)
{
    if (power != right.power)
        return false;
    else
        for (int i = 0; i <= power; i++)
            if (koef[i] != right[i])
                return false;
    return true;
}
 
bool Polynom::operator!=(Polynom &right)
{
    return !(*this == right);
}
 
bool Polynom::operator<(Polynom &right)
{
    if (power != right.power)
        return power < right.power;
    else
        for (int i = 0; i <= power; i++)
            if (abs(koef[i]) < abs(right[i]))
                return true;
    return false;
}
 
bool Polynom::operator>(Polynom &right)
{
    if (power != right.power)
        return power > right.power;
    else
        for (int i = 0; i <= power; i++)
            if (abs(koef[i]) > abs(right[i]))
                return true;
    return false;
}
 
bool Polynom::operator<=(Polynom &right)
{
    return *this < right || *this == right;
}
 
bool Polynom::operator>=(Polynom &right)
{
    return *this > right || *this == right;
}
 
int main()
{
    Polynom p1, p2;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    cout << "ПЕРВЫЙ МНОГОЧЛЕН\n";
    cin >> p1;
    cout << "ВТОРОЙ МНОГОЧЛЕН\n";
    cin >> p2;
    
    cout << "P1 = " << p1 << endl
        << "P2 = " << p2 << endl;
    cout << "P1 + P2 = " << p1 + p2 << endl
        << "P1 - P2 = " << p1 - p2 << endl
        << "P1 * P2 = " << p1 * p2 << endl;
    system("pause");
    return 0;
}
На выходе из SetPower (строка 72) указатель koef сбивается и начинает указывать на какой-то некорректный участок памяти. По крайней мере при пошаговом выполнении так показывается. Но при выводе многочлена почему-то просто немного путаются числа, и все. Помогите пожалуйста разобраться

Добавлено через 5 минут
(если что, не ругать - я болею )
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru