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

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

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

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

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

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

Утечка памяти - C++
Здравствуйте! Я пишу длинную арифметику для целых чисел. Ниже - функция произведения чисел X и Y. Вопрос: произойдет ли утечка памяти, и...

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

Утечка памяти - C++
Помогите с кодом, вот написал реализацию стека по заданию. Преподаватель попросил проверить, верно ли я использую delete, ибо mas в классе...

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

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

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

Цитата Сообщение от 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     утечка памяти
Еще ссылки по теме:

Утечка памяти и delete - C++
Вот накопились вопросы про утечки памяти. 1) Как проявляется утечка памяти? На многих сайтах написано что если не удалять указатели то...

Возникнет ли утечка памяти - C++
Здравствуйте! Такой вопрос. Допустим, я пишу функцию, которая создает и возвращает объект написанного мной класса. В какой-то момент я...

WinApi - Утечка памяти - C++
Никак не пойму, откуда в этом коде утечка памяти? HWND window = GetDesktopWindow(); RECT windowRect; GetWindowRect(window,...

Утечка памяти в методе - C++
Здравствуйте! Написал свой метод для собственной структуры String. Метод должен приклеивать к исходной строке новую. В методе происходит...


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

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

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