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

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

Восстановить пароль Регистрация
 
Pokemon_93
 Аватар для Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
17.11.2013, 21:17     утечка памяти #1
доброго времени суток Уважаемые форумчане, помогите пожалуйста разобраться с утечками памяти
есть массив с геометрическими фигурами.

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;).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2013, 21:17     утечка памяти
Посмотрите здесь:

Утечка памяти C++
C++ Утечка памяти
Утечка памяти?! C++
C++ Утечка памяти
Утечка памяти C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.11.2013, 21:25     утечка памяти #2
ну так и делай
C++
1
delete objects[index]
но это нарушит негласное правило: удалять должен тот кто создавал.
это чревато утечками в будущем при разрастании программы.
Pokemon_93
 Аватар для 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()
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.11.2013, 21:36     утечка памяти #4
а..ну так сохраняй их куда-то и затем удаляй
Pokemon_93
 Аватар для Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
17.11.2013, 21:41  [ТС]     утечка памяти #5
Цитата Сообщение от Jupiter Посмотреть сообщение
а..ну так сохраняй их куда-то и затем удаляй
прошу прощения, может я конечно совсем уже не сооброжаю, так как пишу эту задачу уже в 6 раз, каким образом?
я уже делал все на умных указателях, но преподу не понравилось, сказал искать другой способ, но я его не вижу.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.11.2013, 21:43     утечка памяти #6
измени стратегию так чтобы Circle удалял за собой точки

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

Цитата Сообщение от Jupiter Посмотреть сообщение
измени стратегию так чтобы Circle удалял за собой точки
а вот это идея, спасибо. попробую так сделать. может че нибудь получится.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2013, 21:55     утечка памяти
Еще ссылки по теме:

C++ Утечка памяти в
Утечка памяти C++
C++ Утечка памяти

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

Или воспользуйтесь поиском по форуму:
icpu
 Аватар для icpu
276 / 181 / 36
Регистрация: 10.03.2011
Сообщений: 863
Записей в блоге: 2
17.11.2013, 21:55     утечка памяти #8
CPoint2D* pnt = CreateCPoint2D("center"); удаляй на месте.
Старайся не хранить указатели на дугие классы вроде CPoint2D* pnt; в CCircle. Лучше храни сами объекты - они всё-равно нам нужны, а так не будет вопросов с удалением, да и доступ быстрее.
А если на один объект должно ссылаться много других, то создавай объекты и подсчитывай число ссылающихся отдельно (в главном цикле).
Yandex
Объявления
17.11.2013, 21:55     утечка памяти
Ответ Создать тему
Опции темы

Текущее время: 18:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru