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

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

Войти
Регистрация
Восстановить пароль
 
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
#1

Почему возникает утечка памяти? - C++

17.01.2013, 22:08. Просмотров 364. Ответов 3
Метки нет (Все метки)

Возник вопрос почему может возникать утечка памяти. Интересуют основные правила для их устранения.
На каждый new и malloc нужен delete и free?
Каждый класс нужно удалять (через деструктор).
А что делать с членами класса.
Если у интерфейса есть внутренний интерфейс важна ли их последовательность. Чем больше скажите тем лучше.
Можно пару слов по поводу shared_ptr.
Вопросы про вызов конструктора внутри контейнеров к примеру нового vector или boost::conteiner_ptr
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2013, 22:08     Почему возникает утечка памяти?
Посмотрите здесь:

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
17.01.2013, 22:55     Почему возникает утечка памяти? #2
Цитата Сообщение от vbloodv Посмотреть сообщение
Возник вопрос почему может возникать утечка памяти.
Выделили память и забыли/не смогли ее освободить.
Цитата Сообщение от vbloodv Посмотреть сообщение
Каждый класс нужно удалять (через деструктор).
Это вопрос? нет, не каждый. только те, где это нужно
Цитата Сообщение от vbloodv Посмотреть сообщение
А что делать с членами класса.
Странный вопрос. А что же тогда писать в деструкторе, если не удаление членов класса?
Цитата Сообщение от vbloodv Посмотреть сообщение
Если у интерфейса есть внутренний интерфейс важна ли их последовательность.
Что вы называете интерфейсом в С++?
Цитата Сообщение от vbloodv Посмотреть сообщение
Можно пару слов по поводу shared_ptr.
Удобная штука. Сама заботиться об удалении объекта
Цитата Сообщение от vbloodv Посмотреть сообщение
Вопросы про вызов конструктора внутри контейнеров
Задавайте ^^
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
17.01.2013, 23:51  [ТС]     Почему возникает утечка памяти? #3
Если элемент в контейнер передается по ссылке например в vector вот таким способом:
vector.pushback(new TypeObject); Как мне его позже освобождать. Хотя вроде бы так нельзя вернее можно но через empace нового стандарта, но точно можно в boost::conteiner_ptr. Какие меня ждут последствия? Чего лучше не делать.
Возможно что при передачи параметру (new Object) лучше делать ::shared_ptr Object или что-то вроде того...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2013, 00:16     Почему возникает утечка памяти?
Еще ссылки по теме:

Утечка памяти в - C++
Кто подскажет плиз. Тут у меня утечка памяти foreach (var file in xpsFiles) { ...

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

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

Утечка памяти - C++
Здравствуйте. Есть программа (разбитая на функции) постоянно работающая в цикле и выводящая информацию на консоль. И получается что она...

Утечка памяти? - C++
В Лафоре такой код: #include <iostream> using namespace std; /////////////////////////////////////////////////////////// class...

Утечка памяти - C++
#include "stdafx.h" #include <iostream> #include "ArrayOperation.h" using namespace std; int main() { int...


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

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
18.01.2013, 00:16     Почему возникает утечка памяти? #4
Если элемент в контейнер передается по ссылке например в vector вот таким способом:
vector.pushback(new TypeObject);
Не ссылка, а указатель. Пройтись по вектору и очистить память. К примеру.

C++
1
std::for_each(v.begin(), v.end(), [](const TypeObject* p) { delete p; });
boost::container_ptr отдельная тема. Нужно смотреть доку и понимать что делаете. Можно сделать, чтобы он был ответственен за удаление элементов, можно нет.

Определенно в контейнерах лучше хранить shared_ptr, нежели сырые указатели.
Yandex
Объявления
18.01.2013, 00:16     Почему возникает утечка памяти?
Ответ Создать тему
Опции темы

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