Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 19

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

02.02.2013, 23:24. Показов 1180. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.02.2013, 23:24
Ответы с готовыми решениями:

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

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

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

12
 Аватар для m1Rr0r
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
02.02.2013, 23:36
Как насчет такого ?
C++
1
bombers[i](7, 40, 1, 1);
скобки перегрузить, хотя хз)
0
02.02.2013, 23:50

Не по теме:

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

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

Не по теме:


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

А что-то более дельное посоветовать?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
03.02.2013, 00:28
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
А что-то более дельное посоветовать?
описание вашей пролемы некорректно, для начала разберитесь в сути проблемы, и да у вас есть утечка памяти
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
03.02.2013, 00:29
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
то есть не вызывался деструктор для объекта temp,
а это здесь причем ???
объект создается в стеке он к утечке не имеет никакого отношения, если конечно внутри Bomber с памятью не балуешься
вот у тебя утечка
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
Ship *bombers;
* * bombers = new Bomber[num_bombers];
bombers локальный указатель при выходе из функции пропадает, значит память удалить никто не может
или делай членом класса
или в конце функции
C++
1
delete []bombers;
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.02.2013, 02:27
C++
1
Bomber temp(7, 40, 1, 1);
magic number
0
 Аватар для vbloodv
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
03.02.2013, 03:39
Цитата Сообщение от MrGluck Посмотреть сообщение
magic number
Антипатерн , но 7:40 тут не спроста ZOG заговор

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

Не по теме:

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

0
2895 / 1930 / 208
Регистрация: 05.06.2011
Сообщений: 5,667
03.02.2013, 08:51
Утечка памяти никак с вызовом дструктор не связана, это тебе уже сказали.
Утечка памяти связана как раз с вещами типа
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
C++
4
bombers = new Bomber[num_bombers];
без вызова соответствующего деструктора.
Решение, вообще говоря -- не писать такого кода. Такой код должен быть обёрнут в класс. Переменная класса заводится на стеке либо глобально, вызов генерится методом, вызов деструктора гарантируется, а в нём уж проще предусмотреть освобождение памяти.
Есть и паттерн "разумный указатель" или что-то типа того, и соответствующие классы, но я как-то предпочитаю вручную ему следовать.
0
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
03.02.2013, 09:19
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
Bomber temp(7, 40, 1, 1);
а можно реализацию конструктора?
0
0 / 0 / 0
Регистрация: 07.01.2013
Сообщений: 19
03.02.2013, 12:36  [ТС]
Цитата Сообщение от 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
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
03.02.2013, 14:46
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
bombers[i] = temp;
как у вас реализована функция переопределения оператора присваивания?
Цитата Сообщение от Lemm_Leto Посмотреть сообщение
cout << bombers[i]
как у вас реализована функция переопределения оператора []?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.02.2013, 14:46
Помогаю со студенческими работами здесь

HttpWebRequest, расход памяти непомерно больших объемов и , как следствие, утечка памяти
Добрый вечер. Мне была поставлена такая задача. Написать приложение, которая загружает из списка ссылки с сайта и ищет там определенную...

Как побороть нехвату памяти?
Это просто ужас: приложение весит всего ~ 5МБ и для него выделено только 7.32 МБ памяти, с которых свободно (доступно) только 385...

Утечка памяти в простейшей функции. Как исправить?
Простейший пример: function func(a : string;):TStringList; var i:integer; begin result:=TStringList.Create; for i := 0...

Утечка памяти в программе , как избежать или как правильно уничтожить объект?
Ребят помогите создал класс , вызываю его Creat после destroy ,проект работает только вот память используемая потихоньку растет через пять...

GDI функции (рисование): критична ли утечка памяти и как её устранить?
Друзья! Вот код. Не пинать (к примеру, все хэндлы можно было объявить ВНЕ цикла, я и сам знаю. Изначально он много сложнее и объявление...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru