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

Утечка памяти?!

16.10.2011, 10:04. Показов 1397. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Джесс Либерти и Дэвид Хорват "Освой самостоятельно С++ за 24 часа",
вырезка из листинга 15.4 (стр 233):

Строка 26 - Утечка памяти? Есть сомнения, все-таки книга авторитетная, к тому же 4-е издание...
Миниатюры
Утечка памяти?!  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.10.2011, 10:04
Ответы с готовыми решениями:

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

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

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

9
Заблокирован
16.10.2011, 10:11
в 26 строчке массив указателей Family принимает на себя ответственность за время жизни области памяти, на которую указывал указатель pCat

Вообще то, это не очень хорошая практика. По идее, тот кто захватывает ресурс, тот и должен его освобождать. Иначе возникает риск запутаться.

Если где то в другом месте программы существует точка, в которой происходит освобождение всех захваченных ресурсов (в частности освобождаются участки памяти, на которые указывает Family) - то все оккейно.

Если же этого нигде не происходит, то либо утечки памяти, либо расчет на то, что система сама придавит все захваченные ресурсы топором.

/зы смотрите так же "интеллектуальные указатели"
0
1 / 1 / 0
Регистрация: 12.10.2011
Сообщений: 22
16.10.2011, 10:23  [ТС]
Не совсем понятно..
ИМХО:
в 19 строке создается массив указателей и одновременно выделяется память для 500 объектов Cat, которые сразу же создаются,
в строке 24 выделяется новый (другой) участок памяти для объекта Cat
и в строке 26 адрес на этот участок присваивается i-му указателю массива Family, тем самым теряется адрес памяти, где !до сих пор! хранится объект Cat. То есть адрес потерян, а память не освобождена.
Не так ли?
0
Заблокирован
16.10.2011, 10:30
Цитата Сообщение от wowka19 Посмотреть сообщение
в 19 строке создается массив указателей и одновременно выделяется память для 500 объектов Cat, которые сразу же создаются,
Не правильно.
В 19 строке создаётся массив указателей. Массив может сохранить в себе 500 указателей на объекты типа Cat

Массив хранит в себе не сами объекты типа Cat, а только указатели на эти объекты. Кто создаёт сами объекты, и где они живут, массиву пофигу. Он хранит только указатели этих объектов.

Указатели помнят адреса. Таким образом, зная указатель - знаешь и адрес.

Family запоминает указатели, значит запоминает адрес объектов.

В 24 строчке создаётся объект типа Cat. Адрес объекта помнит pCat

в 26 строчке значение pCat передаётся в массив Family.

Таким образом Family - принимает отвественность за время жизни объектов.
Единственный, кто может нести ответственность за их корректное освобождение.
0
1 / 1 / 0
Регистрация: 12.10.2011
Сообщений: 22
16.10.2011, 10:45  [ТС]
Тьфу блин..
Я перепутал это
C++
1
Cat * Family[500];
вот с этим
C++
1
Cat * Family = new Cat[500];
Спасибо, что прояснили вопрос.. ну и сложен же этот С++....
0
16.10.2011, 10:51

Не по теме:

Цитата Сообщение от wowka19 Посмотреть сообщение
все-таки книга авторитетная, к тому же 4-е издание...
Цитата Сообщение от wowka19 Посмотреть сообщение
Джесс Либерти и Дэвид Хорват "Освой самостоятельно С++ за 24 часа",
авторитетные книги расчитаны на более чем 24 часа и даже более чем на 21 день

Цитата Сообщение от wowka19 Посмотреть сообщение
ну и сложен же этот С++....
"Если вы считаете, что C++ труден, попытайтесь выучить английский."

1
16.10.2011, 11:00

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
авторитетные книги расчитаны на более чем 24 часа и даже более чем на 21 день
Умный человек понимает разницу между базовым курсом, и между курсами углубленного изучения языка. Глупый человек придирается к названию, или наивно верит, что учебные пособия, рассчитанные на базовые знания могут дать что-то больше, чем базовые знания.

2
16.10.2011, 11:09

Не по теме:

Цитата Сообщение от Bers Посмотреть сообщение
Умный человек понимает разницу между базовым курсом, и между курсами углубленного изучения языка. Глупый человек придирается к названию, или наивно верит, что учебные пособия, рассчитанные на базовые знания могут дать что-то больше, чем базовые знания.
Цитата Сообщение от wowka19 Посмотреть сообщение
все-таки книга авторитетная, к тому же 4-е издание...
Bers, я к тому что книга не авторитетная, тем более книга с "базовыми" знаниями

0
16.10.2011, 11:18

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
Bers, я к тому что книга не авторитетная, тем более книга с "базовыми" знаниями
С точки зрения ученика, педагог (тем более, если ученик ему верит) - является авторитетом.

Если для вас лично этот Либерти не авторитет - тогда объясните почему:

Может быть вы не считаете его авторитетным только потому, что с высоты вашего полета базовый курс - это деццкий сад.

Или может быть вы считаете, что он преподаёт не правильно (прививает вредительские навыки)
Или вы просто придрались к самому названию книги (понятно, что название книги - жульнический маркеттинг).

ИМХО для базового курса книга хорошая.

0
1 / 1 / 0
Регистрация: 12.10.2011
Сообщений: 22
16.10.2011, 11:33  [ТС]
за 24 часа.... за 21 день... - это все маркетинговый ход. имхо название не имеет значения... главное - это содержание, а оно в книгах этого автора толковое, что подтверждается их (книг) популярностью.

зы
Цитата Сообщение от Jupiter Посмотреть сообщение
"Если вы считаете, что C++ труден, попытайтесь выучить английский."
- не понял, что вы этим хотели сказать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.10.2011, 11:33
Помогаю со студенческими работами здесь

Утечка памяти
Взял листинг кода из книги Стивен Прата Язык программирования С++. Меня терзают смутные сомнения нет ли здесь утечки памяти, указатель ...

Утечка памяти
Првиетствую, помогите пожалуйста! Делаю бота для игры в вк. Но с каждым проходом внешнего цикла память утекает на 500мб (я думаю это...

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

Утечка памяти
В небольшой программе с использованием OpenCV происходит утечка памяти, с чем связана не понимаю, прошу помощи, спасибо! #include...

Утечка памяти
Подскажите, где здесь может возникать утечка памяти? Вроде везде, где можно - чищу... ///////////////////////////////////// // It's...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru