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

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

Войти
Регистрация
Восстановить пароль
 
Barmaley
10 / 10 / 1
Регистрация: 09.04.2009
Сообщений: 66
#1

А что происходит в памяти? - C++

12.03.2012, 20:01. Просмотров 421. Ответов 7
Метки нет (Все метки)

Привет

Вот код:
(написан с применение фреймворка Qt, но это не влияет на суть вопроса)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//main_window.h
#include "Mill.h"
 
class main_window : QWidget
{
    /**/
    explicit main_window(QWidget *parent , Mill &ml);
    ~main_window();
private:
    Mill *pmill;
    Ui::main_window *ui;
    /**/
};
 
//main_window.cpp
#incllude "main_window.h"
 
main_window::main_window(QWidget *parent, Mill &ml) : QWidget(parent),  ui(new Ui::main_window)   
{
    pmill = &ml;
    /**/
}
 
main_window::~main_window()
{
    delete pmill;
    delete ui;
}
 
//main.cpp
#inlcude "Mill.h"
{
    /**/
    Mill *mll = new Mill(name); 
 
    main_window wnd(0, *mll); 
 
    wnd.show();
    return app.exec();
}
Этого кода, по моему мнению достаточно что бы ответить на вопрос.
Что происходит с указателем mll и mill ? Не очищается ли память по этому адресу два раза?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2012, 20:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос А что происходит в памяти? (C++):

Что происходит за кулисами при выделении памяти для переменной? - C++
Здравствуйте, уважаемые форумчане! У меня такой вопрос: "Что происходит, когда я объявляю переменную? Я думаю, что когда я объявляю...

происходит переполнение памяти ? - C++
Пожалуйста помогите решить проблему: при компиляции ошибок нет, но при запуске выдает ошибку, я так понимаю происходит переполнение...

Почему происходит утечка памяти? - C++
Добрый день, форумчане! Прошу помощи в вопросе - есть функция своп. void swap(CustomVector<T>& in) throw() { ...

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

В этой части кода происходит объявление функций? Что такое void? Что в скобках? - C++
В этой части кода происходит объявление функций? Что такое void? Что в скобках? void get(float **mas, int N, int M); void...

Как происходит процесс выделения памяти в стеке и куче - C++
#include <stdio.h> #include <conio.h> #include <windows.h> #include "disc.h" void main() { SetConsoleCP(1251); ...

7
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
12.03.2012, 20:34 #2
второй раз у вас вылетит исключение если будете очищать
1
Barmaley
10 / 10 / 1
Регистрация: 09.04.2009
Сообщений: 66
12.03.2012, 20:42  [ТС] #3
На текущий момент в этом коде есть утечки памяти ?
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
12.03.2012, 20:44 #4
C++
1
2
    Mill *mll = new Mill(name); 
    main_window wnd(0, *mll);
а где delete mll ???
0
Barmaley
10 / 10 / 1
Регистрация: 09.04.2009
Сообщений: 66
12.03.2012, 21:00  [ТС] #5
В этом то и был вопрос.
В функции main у меня создаётся указатель (mll) и начинает указывать на область данных на стэке.
Перехожу в класс main_window.
Создаю еще один указатель (mill) уже в классе main_window который указывает на ту же облать.
Потом я очищаю указатель (delete mill) в классе, таким образом согласно тому как я себе это представляю, я отмечаю выделенную мною область памяти как свободную.
Окошко закрывается.
Закрывается функция main.
Указатель mll выходит из видимости и удаляется.
Ура я ничего не потерял.
У меня есть подозрения, что я чего-то не понимаю.
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 12
12.03.2012, 21:24 #6
Цитата Сообщение от Barmaley Посмотреть сообщение
В функции main у меня создаётся указатель (mll) и начинает указывать на область данных на стэке.
Перехожу в класс main_window.
Создаю еще один указатель (mill) уже в классе main_window который указывает на ту же облать.
Потом я очищаю указатель (delete mill) в классе, таким образом согласно тому как я себе это представляю, я отмечаю выделенную мною область
второй раз удалять не нужно если ваше delete mill действительно освобождает память

Добавлено через 4 минуты
класс сам себе удалять не должен , он только должен освобождать память которую занял в результате работы своих методов(функция)
1
Barmaley
10 / 10 / 1
Регистрация: 09.04.2009
Сообщений: 66
12.03.2012, 21:32  [ТС] #7
я думаю, что я могу себе позволить в деструкторе очистить память занимаемую private членом класса
0
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 12
12.03.2012, 21:39 #8
Цитата Сообщение от Barmaley Посмотреть сообщение
я думаю, что я могу себе позволить в деструкторе очистить память занимаемую private членом класса
если это динамический член -то без проблем

Добавлено через 26 секунд
Цитата Сообщение от Barmaley Посмотреть сообщение
я думаю, что я могу себе позволить в деструкторе очистить память занимаемую private членом класса
если это динамический член -то без проблем
1
12.03.2012, 21:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2012, 21:39
Привет! Вот еще темы с ответами:

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

что происходит в классе - C++
class Student // класс данных Студент { private: char FIO; // поле Имя int ID; // Поле Номер int Propusk; // Поле, хранящее...

Что происходит в цикле for? - C++
Здравствуйте, не могу разобраться с условием работы в цикле for. Кто сведущ, объясните, пожалуйста, что это за условие такое? for...

Что происходит в строке кода - C++
Всем привет. В буфере хранится путь, я нахожу последнюю точку и зануляю (конец строки). buffer = 0; Как из указателя на точку...


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

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

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