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

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

Войти
Регистрация
Восстановить пароль
 
Тамика
Котовчанин
870 / 450 / 142
Регистрация: 16.02.2010
Сообщений: 2,899
Записей в блоге: 27
#1

Почему происходит утечка памяти? - C++

04.07.2014, 18:00. Просмотров 541. Ответов 12
Метки нет (Все метки)

Добрый день, форумчане!
Прошу помощи в вопросе - есть функция своп.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    void swap(CustomVector<T>& in) throw()
    {
        CustomVector<T> temp(*this);
 
        size = in.size;
        capacity = in.capacity;
        for (int i = 0; i < size; ++i)
            mas[i] = in.mas[i];
 
        in.size = temp.size;
        in.capacity = temp.capacity;
        for (int i = 0; i < size; ++i)
            in.mas[i] = temp.mas[i];
    }
Но по завершению происходит утечка памяти... Не могу понять почему. Может потому что уже сонная под конец рабочего дня, но в упор не вижу проблему. Помогите, пожалуйста.
Вот такой вот main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        CustomVector<int> i_mas(5);
        for (int i = 0; i < i_mas.getSize(); ++i)
            i_mas[i] = rand()%10;
        print(i_mas);
        
        CustomVector<int> c_mas(10);
        for (int i = 0; i < c_mas.getSize(); ++i)
            c_mas[i] = rand()%10;
        print(c_mas);
 
        i_mas.swap(c_mas);
 
        print(i_mas);
        print(c_mas);
Добавлено через 2 минуты
Всё, разобралась. )))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2014, 18:00     Почему происходит утечка памяти?
Посмотрите здесь:

Почему происходит утечка? - C++
Проверяю через vld #include&lt;iostream&gt; #include&lt;vld.h&gt; using namespace std; int main() { char *st = new char; cin &gt;&gt;...

удаляется ли объект или происходит утечка памяти? - C++
Добрый день, подскажите, при таком коде, удаляется ли объект или происходит утечка памяти? std::list&lt;A*&gt; entities; ...

Почему возникает утечка памяти? - C++
Возник вопрос почему может возникать утечка памяти. Интересуют основные правила для их устранения. На каждый new и malloc нужен delete и...

утечка памяти - C++
Может кто-то проверить есть ли здесь утечка памяти? Мне почему-то кажется что есть. В задачи нужно когда пользователь сделал операции...

Утечка памяти? - C++
В Лафоре такой код: #include &lt;iostream&gt; using namespace std; /////////////////////////////////////////////////////////// class...

Утечка памяти - C++
Не могу понять как избежать утечки памяти в своей программе... привожу кусок в одном из мест где на мой взгляд она происходит... Array...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
5594 / 2628 / 240
Регистрация: 01.11.2011
Сообщений: 6,469
Завершенные тесты: 1
07.07.2014, 11:11     Почему происходит утечка памяти? #2
Цитата Сообщение от Тамика Посмотреть сообщение
Всё, разобралась.
А поделиться?
Тамика
Котовчанин
870 / 450 / 142
Регистрация: 16.02.2010
Сообщений: 2,899
Записей в блоге: 27
07.07.2014, 11:14  [ТС]     Почему происходит утечка памяти? #3
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А поделиться?

А что моё Котичество за это получит?)
SatanaXIII
Супер-модератор
Эксперт С++
5594 / 2628 / 240
Регистрация: 01.11.2011
Сообщений: 6,469
Завершенные тесты: 1
07.07.2014, 11:20     Почему происходит утечка памяти? #4
Цитата Сообщение от Тамика Посмотреть сообщение
А что моё Котичество за это получит?)
Власть и богатство. Могущество, доселе невиданное в здешних землях.
Ну может быть не слово в слово, не буква в букву.

Ну еще забыл сказать, как-то совершенно вылетело из головы: нерушимую память в веках поколений. До скончания времен передачу имени из уст в уста, хвалу и почет.
Тамика
Котовчанин
870 / 450 / 142
Регистрация: 16.02.2010
Сообщений: 2,899
Записей в блоге: 27
07.07.2014, 11:38  [ТС]     Почему происходит утечка памяти? #5
Нет, энто не интересует... Вот фиолетового дракошку бы... С острыми, как клинки, зубами, с железной чешуёй!

Добавлено через 12 минут
Ладно. Шутки шучу.
Дело в том, что вот здесь
C++
1
2
        for (int i = 0; i < size; ++i)
            mas[i] = in.mas[i];
нехорошесть происходит.
И, если честно, не помню какая. Потому как кардинально ещё в пятницу заменила все эти переменные структуркой, дабы не страдать лишний раз со свопом.
Ilot
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
07.07.2014, 14:49     Почему происходит утечка памяти? #6
Если у вас происходит утечка памяти, то значит она где-то выделяется. Предположительно это конструктор. А раз так вот так вот врать:
C++
1
2
3
4
5
void swap(CustomVector<T>& in) throw()
{
    CustomVector<T> temp(*this);//Тут может выскочить bad_alloc
   //...
}
- крайне рискованно. Если я ошибаюсь поправьте.
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
07.07.2014, 15:08     Почему происходит утечка памяти? #7
Цитата Сообщение от Тамика Посмотреть сообщение
C++
1
CustomVector<int> i_mas(5);
тут размер 5
Цитата Сообщение от Тамика Посмотреть сообщение
C++
1
CustomVector<int> c_mas(10);
тут 10
в свопе тут
Цитата Сообщение от Тамика Посмотреть сообщение
C++
1
2
for (int i = 0; i < size; ++i)
 mas[i] = in.mas[i];
копируем 10 элементов(size == 10) а в mas 5 элементов - вышли за массив(если только Вы не выделяли память с запасом)

тут аналгично size = 10, а temp.mas на 5 элементов
Цитата Сообщение от Тамика Посмотреть сообщение
for (int i = 0; i < size; ++i)
in.mas[i] = temp.mas[i];
Цитата Сообщение от Тамика Посмотреть сообщение
CustomVector<T> temp(*this);
копирование, а оно у Вас описано и правильно реализовано?)

Добавлено через 1 минуту
Тамика, кстати если у вас дин.массив чего вам адреса не поменять просто и все?)
Тамика
Котовчанин
870 / 450 / 142
Регистрация: 16.02.2010
Сообщений: 2,899
Записей в блоге: 27
07.07.2014, 15:47  [ТС]     Почему происходит утечка памяти? #8
Цитата Сообщение от aLarman Посмотреть сообщение
Тамика, кстати если у вас дин.массив чего вам адреса не поменять просто и все?)
Вот ко всему Вами сказанному выше я и пришла в пятницу. Потому сейчас моя функция имеет другой вид.
aLarman
641 / 562 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
07.07.2014, 15:51     Почему происходит утечка памяти? #9
Тамика,

Не по теме:

ладно

Тамика
Котовчанин
870 / 450 / 142
Регистрация: 16.02.2010
Сообщений: 2,899
Записей в блоге: 27
11.07.2014, 10:25  [ТС]     Почему происходит утечка памяти? #10
Цитата Сообщение от Ilot Посмотреть сообщение
Если я ошибаюсь поправьте.
А почему там может быть утечка?
Не понимаю... Вроде всё аккуратненько.
Ilot
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
11.07.2014, 11:14     Почему происходит утечка памяти? #11
В данном случае речь идет не об утечке, а об генерировании исключения при невозможности выделить память. Спецификация функции говорит о том, что она не генерирует исключений, а значит если оно случиться (об этом и говориться в посте) то это приведет к падению прогаммы вне зависимости от того ловите ли вы это исключение при использовании функции swap или нет.

Добавлено через 11 минут
Вот вам простой примерчик, балуйтесь
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
void func () /*throw()*/ {
    throw 1;
}
int main(int argc, char* argv[]) {
    try {
        func();
    }
    catch(...) {
        std::cout << "Caught!" << std::endl;
    }
    return 0;
}
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
11.07.2014, 11:28     Почему происходит утечка памяти? #12
Цитата Сообщение от Ilot Посмотреть сообщение
то это приведет к падению прогаммы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
void foo ()
{
   std::cout << "И вовсе я не упала, просто досрочно завершилась" << std::endl ;
}
 
void func () /*throw()*/ {
    throw 1;
}
int main(int argc, char* argv[]) {
   std::set_unexpected ( foo ) ;
    try {
        func();
    }
    catch(...) {
        std::cout << "Caught!" << std::endl;
    }
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2014, 11:54     Почему происходит утечка памяти?
Еще ссылки по теме:

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

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

Утечка памяти - C++
Доброго времени суток! Столкнулся с проблемой утечки памяти! Будь у меня маленькая программка, выловил бы легко, но в 2000 строк кода все...

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


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

Или воспользуйтесь поиском по форуму:
Ilot
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
11.07.2014, 11:54     Почему происходит утечка памяти? #13
del..
Yandex
Объявления
11.07.2014, 11:54     Почему происходит утечка памяти?
Ответ Создать тему
Опции темы

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