Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 01.11.2010
Сообщений: 28

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

24.03.2011, 23:07. Показов 883. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2011, 23:07
Ответы с готовыми решениями:

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

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

Динамическая память
Есть 2 массива одной размерности: int *m1 = new int , *m2 = new int ; где N, M некие числа. Собственно вопрос: как...

2
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
24.03.2011, 23:16
C++
1
2
3
4
5
void TVector::SetSize(int v)
{
   Fdata = new double [v];
   Fsize = --v;
}
Память под новое хранилище вы выделяете, а кто будет старую освобождать?
0
0 / 0 / 1
Регистрация: 01.11.2010
Сообщений: 28
24.03.2011, 23:25  [ТС]
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.03.2011, 23:25
Помогаю со студенческими работами здесь

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

динамическая память....
Ввести двухмерном массив, для работы с массивом использовать указатель. Массив разместить в динамической памяти. Определение суммы...

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

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

Динамическая память
Кто сможет помочь? Дана матрица А. Упорядочить элементы каждой строки в порядке не убывания. (нужно составить 2 программы с...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru