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

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

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

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

02.02.2013, 23:24. Просмотров 577. Ответов 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, ну или какие-то другие способы обойти эту утечку. Если что скину остальные куски кода. Помогите, люди добрые
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,248
Завершенные тесты: 2
02.02.2013, 23:36     Утечка памяти. Как ее побороть? #2
Как насчет такого ?
C++
1
bombers[i](7, 40, 1, 1);
скобки перегрузить, хотя хз)
Jupiter
02.02.2013, 23:50
  #3

Не по теме:

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

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

Не по теме:


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

А что-то более дельное посоветовать?
Jupiter
Каратель
Эксперт C++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
03.02.2013, 00:28     Утечка памяти. Как ее побороть? #5
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
А что-то более дельное посоветовать?
описание вашей пролемы некорректно, для начала разберитесь в сути проблемы, и да у вас есть утечка памяти
ValeryS
Модератор
6478 / 4944 / 455
Регистрация: 14.02.2011
Сообщений: 16,386
03.02.2013, 00:29     Утечка памяти. Как ее побороть? #6
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
то есть не вызывался деструктор для объекта temp,
а это здесь причем ???
объект создается в стеке он к утечке не имеет никакого отношения, если конечно внутри Bomber с памятью не балуешься
вот у тебя утечка
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
Ship *bombers;
* * bombers = new Bomber[num_bombers];
bombers локальный указатель при выходе из функции пропадает, значит память удалить никто не может
или делай членом класса
или в конце функции
C++
1
delete []bombers;
MrGluck
Ворчун
Эксперт CЭксперт С++
6333 / 3578 / 445
Регистрация: 29.11.2010
Сообщений: 9,471
03.02.2013, 02:27     Утечка памяти. Как ее побороть? #7
C++
1
Bomber temp(7, 40, 1, 1);
magic number
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]);
Croessmah
03.02.2013, 06:49
  #9

Не по теме:

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

iifat
2192 / 1345 / 98
Регистрация: 05.06.2011
Сообщений: 3,713
03.02.2013, 08:51     Утечка памяти. Как ее побороть? #10
Утечка памяти никак с вызовом дструктор не связана, это тебе уже сказали.
Утечка памяти связана как раз с вещами типа
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
C++
4
bombers = new Bomber[num_bombers];
без вызова соответствующего деструктора.
Решение, вообще говоря -- не писать такого кода. Такой код должен быть обёрнут в класс. Переменная класса заводится на стеке либо глобально, вызов генерится методом, вызов деструктора гарантируется, а в нём уж проще предусмотреть освобождение памяти.
Есть и паттерн "разумный указатель" или что-то типа того, и соответствующие классы, но я как-то предпочитаю вручную ему следовать.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
03.02.2013, 09:19     Утечка памяти. Как ее побороть? #11
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
Bomber temp(7, 40, 1, 1);
а можно реализацию конструктора?
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 происходит почему-то. Вернее даже не утечка, а ошибка нарушения прав доступа
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.02.2013, 14:46     Утечка памяти. Как ее побороть?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,587
Записей в блоге: 12
03.02.2013, 14:46     Утечка памяти. Как ее побороть? #13
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
bombers[i] = temp;
как у вас реализована функция переопределения оператора присваивания?
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
cout << bombers[i]
как у вас реализована функция переопределения оператора []?
Yandex
Объявления
03.02.2013, 14:46     Утечка памяти. Как ее побороть?
Ответ Создать тему
Опции темы

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