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

Утечка памяти. class my_array

22.02.2018, 21:50. Показов 1561. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Не могу понять, где происходить утечка памяти в коде, прошу помощи! Реализую класс my_array с конструкторами дефолтным, копирования, перемещения, операторами присваивания и т.п. Также прошу Вас высказать замечания по моему коду
Заранее благодарю. Прилагаю скрин valgrinda
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
#include <assert.h>
#include <algorithm> // std::copy
#include <cstddef> // size_t
#include <iostream>
 
template<typename T>
class Array
{
public:
  // (default) constructor
  Array(const size_t size = 0)
    : m_size(size)
    , m_array(m_size ? new T[m_size]() : nullptr)
  {
 
  }
    //my copy constructor
    Array(const Array & Arr) : m_size(0), m_array(nullptr)
    {
        if (Arr.m_size == 0)
        {
            assert(Arr.m_array == nullptr);
            return;
        }
        m_size = Arr.m_size;
        m_array = new T[m_size];
        for (size_t i = 0; i != m_size; i++) m_array[i] = Arr.m_array[i];
        //  std::copy(Arr.m_array, Arr.m_array + m_size, m_array);
    }
 
  //my move constructor
  Array(Array && Arr) : m_size(0), m_array(nullptr)
  {
        if (Arr.m_size == 0)
        {
            assert(Arr.m_array == nullptr);
            return;
        }
        m_size = Arr.m_size;
        m_array = Arr.m_array;
        Arr.m_size = 0;
        Arr.m_array = nullptr;
  }
   
  //my swap
  void swap(Array & Arr)
  {
      std::swap(m_size, Arr.m_size);
      std::swap(m_array, Arr.m_array);
  }
 
  //my operator =
  Array & operator = (Array const& Arr)
  {
      if (this != &Arr) Array(Arr).swap(*this);
      return *this;
  }
  
 
/*  Array & operator = (Array const& Arr)
  {
      if (this != &Arr)
      {
          delete [] m_array;
          m_size = Arr.m_size;
          m_array = new T[m_size];
          std::copy(Arr.m_array, Arr.m_array + m_size, m_array);
      }
  }
 
  Array & operator = (Array const& Arr)
  {
        if (this != &Arr)
        {
            T * new_array = new T[Arr.m_size];
            std::copy(Arr.m_array, Arr.m_array + Arr.m_size, new_array);
            delete [] m_array;
            m_array = new_array;
            m_size = Arr.m_size;
        }
        return *this;
  }*/
    
  Array & operator = (Array&& Arr)
  {
      destroy();
      m_size = Arr.m_size;
      m_array = Arr.m_array;
      Arr.m_array = nullptr;
      return *this;
  }
  
  const size_t size() const
  {
    return m_size;
  }
 
  T& operator [](const size_t index)
  {
    assert(index < m_size);
 
    return m_array[index];
  }                                       
  
      ~Array() {destroy();}
  void out()
  {
    for (size_t i = 0; i != m_size; i++)
        std::cout << m_array[i] << " ";
    std::cout << std::endl;
  }
 
private:
    void destroy() 
    { 
        if (m_size)
        {
            delete[] m_array;
      m_size = 0;
            return;
        }
    }
  size_t m_size;
  T* m_array;
};
 
int main()
{
    Array<int> arr1(10);
    //Array<int> arr2(arr1);
    //Array<int> arr3 = arr2;
    //arr1.out(); arr2.out(); arr3.out();
}
Миниатюры
Утечка памяти. class my_array  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.02.2018, 21:50
Ответы с готовыми решениями:

Утечка памяти в
Кто подскажет плиз. Тут у меня утечка памяти foreach (var file in xpsFiles) { ...

Утечка памяти
Доброго времени суток, форумчане. Помогите справиться с утечкой памяти, не понятно где зараза засела. Это класс представления числа в СОК...

Утечка памяти
Где я допустил ее(утечку)? #define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;string&gt; ...

25
3 / 3 / 0
Регистрация: 21.02.2016
Сообщений: 75
22.02.2018, 22:56  [ТС]
Студворк — интернет-сервис помощи студентам
QuakerRUS, через 2 минуты скажу

Добавлено через 3 минуты
2 аллока 1 фри,
а still reachable: 18,944 bytes in 1 blocks, что говорит что оно не зависит от программы, которую я запускаю
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
22.02.2018, 22:58
Лучший ответ Сообщение было отмечено bikovbiv как решение

Решение

bikovbiv, что и требовалось доказать. Если несколько разных конструкторов, то и new может быть больше, чем delete, так что в данном случае все нормально.
1
3 / 3 / 0
Регистрация: 21.02.2016
Сообщений: 75
22.02.2018, 23:04  [ТС]
Большое спасибо за потраченное время, постараюсь повозиться с программой еще или покажу преподавателю, может все ок у меня)
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
22.02.2018, 23:45
Цитата Сообщение от QuakerRUS Посмотреть сообщение
в каком? Не вижу пока.
Здесь, но тут есть освобождение старой памяти в левом операнде. Сделано через автоматический вызов деструктора для временной копии (перед этим, через swap, там окажется адрес памяти из левого операнда).
Цитата Сообщение от bikovbiv Посмотреть сообщение
C++
1
2
3
4
5
6
  //my operator =
  Array & operator = (Array const& Arr)
  {
      if (this != &Arr) Array(Arr).swap(*this);
      return *this;
  }
Цитата Сообщение от bikovbiv Посмотреть сообщение
Эта реализация была представлена в одном онлайн-курсе и она мне понравилась лаконичностью
На вкус и цвет товарищей нет. По мне, так только разбираться дольше.
0
3 / 3 / 0
Регистрация: 21.02.2016
Сообщений: 75
22.02.2018, 23:54  [ТС]
nd2, А так больше Вы не видите, где может происходить утечка?Может не совсем правильно выполен конструктор копирования или перемещения?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.02.2018, 00:11
Цитата Сообщение от bikovbiv Посмотреть сообщение
А так больше Вы не видите, где может происходить утечка?
Не вижу.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2018, 00:11
Помогаю со студенческими работами здесь

Утечка памяти
Подскажите, где здесь может возникать утечка памяти? Вроде везде, где можно - чищу... ///////////////////////////////////// // It's...

Утечка памяти
Либо я себе мозг запудрила, либо помогите мне :) есть у меня вектор vector&lt;char*&gt; names_variable; дополняю его таким образом ...

Утечка памяти
Здравствуйте! Возникает проблема при очистке дин.памяти. Помогите, найти ошибку((( ......... double *str=new double; double...

Утечка памяти
Здравствуйте. Есть программа (разбитая на функции) постоянно работающая в цикле и выводящая информацию на консоль. И получается что она...

Утечка памяти
Доброго времени суток. Написал оконное приложение. Столкнулся с проблемой - утекает память. Какие есть средства, чтобы определить,...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru