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

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

Войти
Регистрация
Восстановить пароль
 
Lemm_Leto
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 19
#1

Утечка памяти. Как ее побороть? - C++

02.02.2013, 23:24. Просмотров 618. Ответов 12
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Player::add()
{
    Ship *bombers;
    bombers = new Bomber[num_bombers];
 
    for(int i=0; i<num_bombers; i++)
    {
        Bomber temp(7, 40, 1, 1);
        bombers[i] = temp;
    };
    for(int i=0 ; i<num_bombers; i++)
        cout << bombers[i] << endl;
    getch();
}
Есть вот такой вот метод класса, как сделать чтобы память не утекала, то есть не вызывался деструктор для объекта temp, ну или какие-то другие способы обойти эту утечку. Если что скину остальные куски кода. Помогите, люди добрые
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2013, 23:24
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Утечка памяти. Как ее побороть? (C++):

Дерево. Утечка памяти, как обнаружить? - C++
Приветствую! Помогите найти ошибку в коде? Точнее ошибку знаю, строка : element-&gt;ojciec-&gt;tab_dzieci= element; Только не знаю...

Есть ли утечка памяти в проекте? И как можно это перепроверять? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class MyArray { int *ptrarray; //массив ...

Утечка памяти. new/delete. Всё как доктор прописал, но не работает - C++
Всем привет! Начну сразу с кода: #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; class...

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

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

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

12
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,283
Завершенные тесты: 2
02.02.2013, 23:36 #2
Как насчет такого ?
C++
1
bombers[i](7, 40, 1, 1);
скобки перегрузить, хотя хз)
0
Jupiter
02.02.2013, 23:50
  #3

Не по теме:

Цитата Сообщение от Lemm_Leto Посмотреть сообщение
Утечка памяти. Как ее побороть?
смените с++ на язык с автоматическим управленим памятью

0
Lemm_Leto
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 19
03.02.2013, 00:13  [ТС] #4
Цитата Сообщение от Jupiter Посмотреть сообщение

Не по теме:


смените с++ на язык с автоматическим управленим памятью

А что-то более дельное посоветовать?
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
03.02.2013, 00:28 #5
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
А что-то более дельное посоветовать?
описание вашей пролемы некорректно, для начала разберитесь в сути проблемы, и да у вас есть утечка памяти
0
ValeryS
Модератор
6968 / 5305 / 522
Регистрация: 14.02.2011
Сообщений: 17,887
03.02.2013, 00:29 #6
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
то есть не вызывался деструктор для объекта temp,
а это здесь причем ???
объект создается в стеке он к утечке не имеет никакого отношения, если конечно внутри Bomber с памятью не балуешься
вот у тебя утечка
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
Ship *bombers;
* * bombers = new Bomber[num_bombers];
bombers локальный указатель при выходе из функции пропадает, значит память удалить никто не может
или делай членом класса
или в конце функции
C++
1
delete []bombers;
1
MrGluck
Модератор
Эксперт CЭксперт С++
7789 / 4829 / 750
Регистрация: 29.11.2010
Сообщений: 13,182
03.02.2013, 02:27 #7
C++
1
Bomber temp(7, 40, 1, 1);
magic number
0
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
03.02.2013, 03:39 #8
Цитата Сообщение от MrGluck Посмотреть сообщение
magic number
Антипатерн , но 7:40 тут не спроста ZOG заговор

Цитата Сообщение от Lemm_Leto Посмотреть сообщение
как сделать чтобы память не утекала,
может сделай:
C++
1
std::tr1::shared_ptr<Ship> bombers(new Bomber[num_bombers]);
0
Croessmah
03.02.2013, 06:49
  #9

Не по теме:

Цитата Сообщение от vbloodv Посмотреть сообщение
C++
1
std::tr1::shared_ptr<Ship> bombers(new Bomber[num_bombers]);
Зачем tr1? Все уже в стандарте =)

0
iifat
2324 / 1479 / 124
Регистрация: 05.06.2011
Сообщений: 4,113
03.02.2013, 08:51 #10
Утечка памяти никак с вызовом дструктор не связана, это тебе уже сказали.
Утечка памяти связана как раз с вещами типа
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
C++
4
bombers = new Bomber[num_bombers];
без вызова соответствующего деструктора.
Решение, вообще говоря -- не писать такого кода. Такой код должен быть обёрнут в класс. Переменная класса заводится на стеке либо глобально, вызов генерится методом, вызов деструктора гарантируется, а в нём уж проще предусмотреть освобождение памяти.
Есть и паттерн "разумный указатель" или что-то типа того, и соответствующие классы, но я как-то предпочитаю вручную ему следовать.
0
Van111
211 / 190 / 4
Регистрация: 03.08.2011
Сообщений: 2,610
Записей в блоге: 12
03.02.2013, 09:19 #11
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
Bomber temp(7, 40, 1, 1);
а можно реализацию конструктора?
0
Lemm_Leto
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 19
03.02.2013, 12:36  [ТС] #12
Цитата Сообщение от Van111 Посмотреть сообщение
а можно реализацию конструктора?
C++
1
2
3
4
5
6
7
8
9
10
11
12
Bomber::Bomber(float temp_att, float temp_hp, float multiply_attack, float multiply_hp) :Squadron(temp_hp, multiply_hp)
{
    attack_beam = temp_att * multiply_attack;
};
 
Squadron::Squadron(float temp_hp, float multiply_hp)
{
    hp = temp_hp * multiply_hp;
};
 
Ship::Ship()
{};
Добавлено через 2 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
а это здесь причем ???
объект создается в стеке он к утечке не имеет никакого отношения, если конечно внутри Bomber с памятью не балуешься
вот у тебя утечка

bombers локальный указатель при выходе из функции пропадает, значит память удалить никто не может
или делай членом класса
или в конце функции
C++
1
delete []bombers;
У меня утечка еще на этапе cout происходит почему-то. Вернее даже не утечка, а ошибка нарушения прав доступа
0
Van111
211 / 190 / 4
Регистрация: 03.08.2011
Сообщений: 2,610
Записей в блоге: 12
03.02.2013, 14:46 #13
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
bombers[i] = temp;
как у вас реализована функция переопределения оператора присваивания?
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
cout << bombers[i]
как у вас реализована функция переопределения оператора []?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2013, 14:46
Привет! Вот еще темы с ответами:

Утечка памяти - C++
Привет! написал программму, и не могу разобраться где утекает память. помогите кто сможет. Задание #include &lt;iostream&gt; ...

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

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

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


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

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

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