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

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

Восстановить пароль Регистрация
 
Bartimeus33nt10
0 / 0 / 0
Регистрация: 01.11.2010
Сообщений: 28
24.03.2011, 23:07     Динамическая память. #1
Всем привет!

Уважаемые знатоки, можете посмотреть мою реализацию класса вектор? У меня при их большем количестве в программе вечно выпадают ошибки доступа к памяти или она просто зависает.
Может я допустил где нибудь совсем уж глупую ошибку при выделении динамической памяти?
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;
}
Буду рад выслушать вашу конструктивную критику.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2011, 23:07     Динамическая память.
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ma3a
Эксперт C++
612 / 456 / 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;
}
Память под новое хранилище вы выделяете, а кто будет старую освобождать?
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);
Yandex
Объявления
24.03.2011, 23:25     Динамическая память.
Ответ Создать тему
Опции темы

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