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

Динамическое выделение памяти - C++

Восстановить пароль Регистрация
 
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
19.01.2013, 20:12     Динамическое выделение памяти #1
Доброго времени суток всем! Есть такая проблема... Дан класс полином. который содержит закрытые члены коэффициент и степень полинома, а так же массив(динамический) этих членов. Вот что у меня получилось:

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
#include "stdafx.h"
#include <iostream>
#include <locale.h>
using namespace std;
 
class Polinom
{
    private:
        int koef,
            stepen;
 
        Polinom *mas;
 
    public:
        Polinom(int kol)
        {
            mas = new Polinom[kol];
            for(int i = 0; i < Kol; i++)
            {
                wcout << L"Введите коэффициент полинома: ";
                    cin >> mas[0].koef;
                wcout << L"Введите степень полинома: ";
                    cin >> mas[0].stepen;
            }
        }
 
        ~Polinom()
        {
            delete[] mas;
        }
 
        void print(int kol)
        {
            for(int i = 0; i < kol; i++)
            {
                wcout << L"Коэффициент полинома: " << mas[i].koef;
                wcout << L"\nCтепень полинома: " << mas[i].stepen << "\n";
            }
        }
};
но программа закрывается... не хитрым путем понял что проблема в выделении памяти под массив, но в чем ошибка разобраться так и не смог... Заранее благодарю за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2013, 20:12     Динамическое выделение памяти
Посмотрите здесь:

C++ Динамическое выделение памяти.
C++ динамическое выделение памяти
C++ Динамическое выделение памяти
C++ динамическое выделение памяти
Динамическое выделение памяти C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0xv
12 / 12 / 1
Регистрация: 28.12.2012
Сообщений: 41
19.01.2013, 20:27     Динамическое выделение памяти #2
Приведенный код не компилируется вообще. У вас нет конструктора по умолчанию.
И может стоит хранить степень и коэффициенты в виде массива (вектора) пар?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
19.01.2013, 20:30  [ТС]     Динамическое выделение памяти #3
0xv, вот так все компилируется, но после открытия консоль сразу же закрывается...

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
// Polinom.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <locale.h>
using namespace std;
 
class Polinom
{
    private:
        int koef,
            stepen;
 
        Polinom *mas;
 
    public:
        Polinom(int kol = 1)
        {
            mas = new Polinom[kol];
            for(int i = 0; i < 1; i++)
            {
                wcout << L"Введите коэффициент полинома: ";
                    cin >> mas[0].koef;
                wcout << L"Введите степень полинома: ";
                    cin >> mas[0].stepen;
            }
        }
 
        ~Polinom()
        {
            delete[] mas;
        }
 
        void print(int kol)
        {
            for(int i = 0; i < kol; i++)
            {
                wcout << L"Коэффициент полинома: " << mas[i].koef;
                wcout << L"\nCтепень полинома: " << mas[i].stepen << "\n";
            }
        }
};
 
void _tmain()
{
    wcout.imbue(locale(".866"));
 
    Polinom p1(2);
    p1.print(1);
 
    cout << "\n\n";
}
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
19.01.2013, 20:32     Динамическое выделение памяти #4
yoghurt92, system("Pause");
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
19.01.2013, 20:34  [ТС]     Динамическое выделение памяти #5
0xv, нужно чтоб был массив...

Добавлено через 1 минуту
Invader_Zim, консоль закрывается не от этого, когда убрал строчку с выделением памяти окно не закрывалось... просто я не могу понять, что не так делаю...
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.01.2013, 20:38     Динамическое выделение памяти #6
delete
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,206
Завершенные тесты: 1
19.01.2013, 20:40     Динамическое выделение памяти #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
class Polinom
{
    private:
        int *koef,
            *stepen;
 
        //Polinom *mas;
 
    public:
        Polinom():koef(0),stepen(0){}
        Polinom(int kol)
        {
            koef = new int[kol];
            stepen = new int[kol];
            for(int i = 0; i < kol; i++)
            {
                cout << "Введите коэффициент полинома: ";
                cin >> koef[i];
                cout << "Введите степень полинома: ";
                cin >> stepen[i];
            }
        }
 
        ~Polinom()
        {
            delete[] koef;
            delete[] stepen;
        }
 
        void print(int kol)
        {
            for(int i = 0; i < kol; i++)
            {
                cout << "Коэффициент полинома: " << koef[i];
                cout << "\nCтепень полинома: " << stepen[i] << "\n";
            }
        }
};
int main(void)
{
    Polinom p(3);
    p.print(3);
    system ("pause");
    return 0;
}
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
19.01.2013, 20:41  [ТС]     Динамическое выделение памяти #8
проблему решил с подсказки 0xv, но теперь выдает что что-то не так с деструктором...
0xv
12 / 12 / 1
Регистрация: 28.12.2012
Сообщений: 41
19.01.2013, 20:44     Динамическое выделение памяти #9
Цитата Сообщение от yoghurt92 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
        Polinom(int kol)
        {
            koef = new int[kol];
            stepen = new int[kol];
            for(int i = 0; i < kol; i++)
            {
                cout << "Введите коэффициент полинома: ";
                cin >> koef[i];
                cout << "Введите степень полинома: ";
                cin >> stepen[i];
            }
        }
Тут когда создаешь массив объектов вызывается этот же конструктор, и так бесконечно.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
19.01.2013, 20:44  [ТС]     Динамическое выделение памяти #10
вот так, но ошибка с деструктором...

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
// Polinom.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <locale.h>
using namespace std;
 
class Polinom
{
    private:
        int koef,
            stepen;
 
        Polinom *mas;
 
    public:
        Polinom():koef(1), stepen(1) {};
 
        Polinom(int kol)
        {
            mas = new Polinom[kol];
            for(int i = 0; i < 1; i++)
            {
                wcout << L"Введите коэффициент полинома: ";
                    cin >> mas[i].koef;
                wcout << L"Введите степень полинома: ";
                    cin >> mas[i].stepen;
            }
        }
 
        ~Polinom()
        {
            delete[] mas;
        }
 
        void print(int kol)
        {
            for(int i = 0; i < kol; i++)
            {
                wcout << L"Коэффициент полинома: " << mas[i].koef;
                wcout << L"\nCтепень полинома: " << mas[i].stepen << "\n";
            }
        }
};
 
void _tmain()
{
    wcout.imbue(locale(".866"));
 
    Polinom p1(1);
    p1.print(1);
 
    cout << "\n\n";
}
0xv
12 / 12 / 1
Регистрация: 28.12.2012
Сообщений: 41
19.01.2013, 20:52     Динамическое выделение памяти #11
Цитата Сообщение от yoghurt92 Посмотреть сообщение
Polinom():koef(1), stepen(1) {};
После отработки этого конструктора указатель на mas хранит мусор. Поэтому ты потом в деструкторе пытаешься удалит память которую не выделял. Исправить можно так.
C++
1
Polinom():koef(1), stepen(1), mas(0) {};

Не по теме:

Но по мне лучше хранить степени и коэффициенты в двух различных массивах(как предложили выше)

yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
19.01.2013, 20:54  [ТС]     Динамическое выделение памяти #12
Всем спасибо за помощь!
zss
Модератор
Эксперт С++
 Аватар для zss
5953 / 5558 / 1787
Регистрация: 18.12.2011
Сообщений: 14,206
Завершенные тесты: 1
19.01.2013, 20:56     Динамическое выделение памяти #13
Все же, не понятно, для чего понадобилось так извращаться.
Ладно бы делали список или очередь.....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2013, 21:20     Динамическое выделение памяти
Еще ссылки по теме:

Динамическое выделение памяти C++
Динамическое выделение памяти C++
C++ Динамическое выделение памяти

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

Или воспользуйтесь поиском по форуму:
Invader_Zim
19.01.2013, 21:20     Динамическое выделение памяти
  #14

Не по теме:

извращение ради извращения это уже не извращение.

Yandex
Объявления
19.01.2013, 21:20     Динамическое выделение памяти
Ответ Создать тему
Опции темы

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