Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Bartimeus33nt10
0 / 0 / 0
Регистрация: 01.11.2010
Сообщений: 28
#1

Динамическая память. - C++

24.03.2011, 23:07. Просмотров 452. Ответов 2
Метки нет (Все метки)

Всем привет!

Уважаемые знатоки, можете посмотреть мою реализацию класса вектор? У меня при их большем количестве в программе вечно выпадают ошибки доступа к памяти или она просто зависает.
Может я допустил где нибудь совсем уж глупую ошибку при выделении динамической памяти?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once
 
class TVector
{
public:
    TVector();
    TVector(int v);
    ~TVector();
    TVector(TVector& V);
    double& operator[](int i);
    TVector operator+ (TVector &V);
    TVector operator- (TVector &V);
    TVector operator* (double constant);
    TVector& operator = (const TVector &V);
   
    void SetSize(int v);
    int GetSize(){return Fsize;}
 
protected:
    double *Fdata;
    int Fsize;
};
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
#include "Vector.h"
 
//----------------------------------------------------------------------------------------------------------------------//
/*TVector*/
TVector::TVector(int v)
{
   Fdata = new double [v];
   Fsize = --v;
}
 
TVector::TVector()
{
    Fdata = 0;
    Fsize = 0;
}
 
void TVector::SetSize(int v)
{
   Fdata = new double [v];
   Fsize = --v;
}
 
double& TVector::operator[](int v)
{
    return Fdata[v];
}
 
TVector::~TVector()
{
    if (Fdata) 
    delete [] Fdata; 
}
 
TVector::TVector(TVector &V)
{
    Fsize = V.Fsize;
   
    Fdata = new double [Fsize+1];
    for (int i = 0; i <= Fsize; i++)
    Fdata[i] = V.Fdata[i];
}
 
 
 
 
TVector TVector::operator + (TVector &V)
{
    
    TVector C(V);
 
       for (register int i = 0; i <=  Fsize; i++)
       {
          C[i] = Fdata [i] + V[i];
       }
 
    return C;
    
    
}
 
 
TVector TVector::operator - (TVector &V)
{
    TVector C(V);
  
       for (register int i = 0; i <= Fsize; i++)
       {
          C[i] =  Fdata [i]  - V[i];
       }
    
 
    return C;
 
    
}
 
TVector TVector::operator *(double constant)
{
    TVector C(Fsize+1);
 
    for (register int i = 0; i <= Fsize; i++)
    {
        C[i] = constant*Fdata [i];
    }
 
    return C;
 
}
 
TVector& TVector::operator = (const TVector &V)
{
    if (this != &V) 
    {
            double * new_Fdata = new double[V.Fsize+1];
            
            std::copy(V.Fdata, V.Fdata + V.Fsize +1, new_Fdata);            
            delete [] Fdata;
 
            Fdata = new_Fdata;
            Fsize = V.Fsize;
    }
        return *this;
}
Буду рад выслушать вашу конструктивную критику.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2011, 23:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Динамическая память. (C++):

Статическая память,Динамическая память. - C++
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные числа. Определить координаты левого нижнего...

Динамическая память - C++
в чем ошибка #include &lt;iostream&gt; #include &quot;conio.h&quot; using namespace std; class{A int a; double b; char s; }

Динамическая память C++ - C++
Народ, подскажите, плиз, что я делаю не так? Надо посимвольно ститать строку, в процессе выделяя ей ровно столько памяти, сколько...

Динамическая память - C++
Надо ввести массив из файла. Сам массив хранится в динамической памяти. Сколько я над прогой не бился, а вводит данные криво. С...

Динамическая память с++ - C++
Как использовать динамическую память в с++

Динамическая память - C++
Добрый вечер! Возникла у меня такая проблемка, нужно от статической памяти перейти к динамической. То ли уже голова не варит, то ли руки не...

2
Ma3a
Эксперт С++
619 / 463 / 31
Регистрация: 28.01.2011
Сообщений: 605
24.03.2011, 23:16 #2
C++
1
2
3
4
5
void TVector::SetSize(int v)
{
   Fdata = new double [v];
   Fsize = --v;
}
Память под новое хранилище вы выделяете, а кто будет старую освобождать?
0
Bartimeus33nt10
0 / 0 / 0
Регистрация: 01.11.2010
Сообщений: 28
24.03.2011, 23:25  [ТС] #3
C++
1
2
3
4
5
TVector::TVector(int v)
{
   Fdata = new double [v];
   Fsize = --v;
}
Вы имеете ввиду ту память освободить, которую я здесь выделил? Извиняюсь, за немного некорректный код. Я этот конструктор не использую. Обычно я делаю так:

C++
1
2
TVector A;
A.SetSyze(3);
Или так:

C++
1
2
3
4
TVector A;
A.SetSyze(3);
 
TVector B(A);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2011, 23:25
Привет! Вот еще темы с ответами:

Динамическая память - C++
Создать одномерный массив в котором хранятся года рождения людей (года вводятся в массив в ручную, размер массива не менее 5). Определить...

Динамическая память [new] - C++
Если записать так: char *p; p = new char; cin&gt;&gt;p; for(int i=0; i&lt;strlen(p); i++) cout&lt;&lt;p&lt;&lt;endl;

Динамическая память - C++
Каким способом можно задать динамическую память , кроме как через new ?

Динамическая память - C++
Как создать массив A через динамическую память ???


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

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

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