Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
#1

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

17.11.2013, 21:17. Просмотров 382. Ответов 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++):

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

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

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

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

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

Утечка памяти
Либо я себе мозг запудрила, либо помогите мне :) есть у меня вектор...

7
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 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
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 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
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 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
460 / 342 / 84
Регистрация: 10.03.2011
Сообщений: 1,464
Записей в блоге: 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
Привет! Вот еще темы с решениями:

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

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

Утечка памяти
Доброго времени суток, форумчане. Помогите справиться с утечкой памяти, не...

Утечка памяти
Здравствуйте! Я пишу длинную арифметику для целых чисел. Ниже - функция...


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

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

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