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

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

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

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

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

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

Строка 26 - Утечка памяти? Есть сомнения, все-таки книга авторитетная, к тому же 4-е издание...
0
Миниатюры
Утечка памяти?!  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2011, 10:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Утечка памяти?! (C++):

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

Утечка памяти - C++
Доброго времени суток, форумчане. Помогите справиться с утечкой памяти, не понятно где зараза засела. Это класс представления числа в СОК...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Не по теме:

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

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

1
Bers
16.10.2011, 11:00
  #7

Не по теме:

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

2
Jupiter
16.10.2011, 11:09
  #8

Не по теме:

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

0
Bers
16.10.2011, 11:18
  #9

Не по теме:

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

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

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

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

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

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

зы
Цитата Сообщение от Jupiter Посмотреть сообщение
"Если вы считаете, что C++ труден, попытайтесь выучить английский."
- не понял, что вы этим хотели сказать
0
16.10.2011, 11:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2011, 11:33
Привет! Вот еще темы с ответами:

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

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

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

утечка памяти - C++
Может кто-то проверить есть ли здесь утечка памяти? Мне почему-то кажется что есть. В задачи нужно когда пользователь сделал операции...


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

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

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