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

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

Войти
Регистрация
Восстановить пароль
 
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
#1

утечка памяти - C++

17.11.2013, 21:17. Просмотров 358. Ответов 7
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
IGeometryObject* objects[maxNumObjects];
        do
        {
            type = GetEnteredObjectType();
            switch (type)
            {
            case 1:
                {
                    objects[index] = CreateCPoint3D("Point");
                    break;
                }
            case 2:
                {
                    objects[index] = CreateCircle();
                    break;
                }
            case 3:
и есть функции которые эти фигуры создают.
приведу пример создания только для круга

C++
1
2
3
4
5
6
7
8
9
10
CCircle* CreateCircle()
{
    double r;
    std::cout << "Enter Circle info: ";
    r = GetValue("radius");
    CPoint2D* pnt = CreateCPoint2D("center");
    CCircle* circle (new CCircle(pnt, r));
 
    return circle;
}
проблема заключается в том что как то надо удалить
CPoint2D* pnt = CreateCPoint2D("center");
и
CCircle* circle (new CCircle(pnt, r)); но уже после того как функция возвратит круг и поместит его в массив (return circle;).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2013, 21:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос утечка памяти (C++):

утечка памяти - C++
если запустить код char *pointer = NULL; for( int i = 0; i &lt; 10; i++ ) { pointer = new char; } delete pointer; , то есть...

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

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

Утечка памяти?! - C++
Джесс Либерти и Дэвид Хорват &quot;Освой самостоятельно С++ за 24 часа&quot;, вырезка из листинга 15.4 (стр 233): Строка 26 - Утечка памяти?...

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

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

7
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.11.2013, 21:25 #2
ну так и делай
C++
1
delete objects[index]
но это нарушит негласное правило: удалять должен тот кто создавал.
это чревато утечками в будущем при разрастании программы.
0
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
17.11.2013, 21:32  [ТС] #3
Цитата Сообщение от Jupiter Посмотреть сообщение
ну так и делай
C++
1
delete objects[index]
но это нарушит негласное правило: удалять должен тот кто создавал.
это чревато утечками в будущем при разрастании программы.
так сами фигуры удаляются при окончании работы.
for(int i = 0; i != index; ++i)
delete objects[i];


нужно удалить именно точки которые создаются в createCircle()
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.11.2013, 21:36 #4
а..ну так сохраняй их куда-то и затем удаляй
0
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
17.11.2013, 21:41  [ТС] #5
Цитата Сообщение от Jupiter Посмотреть сообщение
а..ну так сохраняй их куда-то и затем удаляй
прошу прощения, может я конечно совсем уже не сооброжаю, так как пишу эту задачу уже в 6 раз, каким образом?
я уже делал все на умных указателях, но преподу не понравилось, сказал искать другой способ, но я его не вижу.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.11.2013, 21:43 #6
измени стратегию так чтобы Circle удалял за собой точки

Цитата Сообщение от Pokemon_93 Посмотреть сообщение
я уже делал все на умных указателях, но преподу не понравилось
мб напиши свои смарт-указатели?
1
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
17.11.2013, 21:47  [ТС] #7
Jupiter,

Цитата Сообщение от Jupiter Посмотреть сообщение
измени стратегию так чтобы Circle удалял за собой точки
а вот это идея, спасибо. попробую так сделать. может че нибудь получится.
0
icpu
356 / 270 / 59
Регистрация: 10.03.2011
Сообщений: 1,297
Записей в блоге: 2
17.11.2013, 21:55 #8
CPoint2D* pnt = CreateCPoint2D("center"); удаляй на месте.
Старайся не хранить указатели на дугие классы вроде CPoint2D* pnt; в CCircle. Лучше храни сами объекты - они всё-равно нам нужны, а так не будет вопросов с удалением, да и доступ быстрее.
А если на один объект должно ссылаться много других, то создавай объекты и подсчитывай число ссылающихся отдельно (в главном цикле).
0
17.11.2013, 21:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2013, 21:55
Привет! Вот еще темы с ответами:

Утечка памяти - C++
Господа подскажите как узнать какая п̶а̶д̶л̶а̶ переменная жрет память? Или как посмотреть сколько вообще переменных и объектов находятся в...

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

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

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


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

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

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