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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
#1

"Очереди" - очистка памяти - C++

19.02.2010, 03:43. Просмотров 1497. Ответов 6
Метки нет (Все метки)

Привет всем, у меня возникла такая проблема, есть функция которая делает выборку из очереди:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//------------Выборка из очереди
Order *get(Order* beg){
 
    if(!beg){
        cout << "\nОчередь пуста";
        return 0;
    }
    print(*beg);
    //delete beg;
    beg = beg->next;
    return beg;
 
}
где "beg" - указатель на начало очереди, получается что при выборке тут(пример из практикума Павловской) просто изменяется указатель "beg" на указатель след. структуры. Под структуры память выделялась из кучи. Изменив указатель - память ведь не освободиться. Вообщем попробовал использовать оператор delete beg; и при второй выборки из очереди вывалилась ошибка :
Unhandled exception at 0x102b19dc (msvcr80d.dll) in moe.exe: 0xC0000005: Access violation reading location 0xfeeeff6a. Заранее спасибо всем отозвавшимся
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2010, 03:43     "Очереди" - очистка памяти
Посмотрите здесь:

Очистка динамической памяти очереди - C++
Доброго времени суток! Я вот думаю-думаю, но докумекать не могу. Я пишу очередь (основываюсь на логику и принцип очереди) так вот,...

Очистка экрана, кроме system("cls") - C++
доброго всем времени суток. ответьте кто знает, есть ли еще в windows функции очистки экрана кроме system(&quot;cls&quot;);? У меня сильно мигает...

Формирование списка по приципу "очереди" - C++
Можете ,пожалуйста, внятно объяснить, а то сижу уже часа 2 и не понимаю, что к чему #include &lt;iostream&gt; using namespace std; ...

"Очистка" массива wchar_t - C++
Ребята скажите, есть массив wchar_t и есть функция получения длинны массива wcslen, как очистить массив так, что бы эта функция выдавала 0,...

Описать шаблон класса АТД: "Участник очереди на печать издания: фамилия, телефон, количество страниц" - C++
Шаблоны классов с++. Нужно доделать задачу. 1. Описать шаблон класса АТД: &quot;Участник очереди на печать издания: фамилия, телефон,...

"Очереди" как сделать? - C++
Дано натуральное число n, целые числа а1 ., а2n. Выяснить, верно ли, что для i = 1 ., n выполняется аі + а2n-i+1&gt;17.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,505
19.02.2010, 03:49     "Очереди" - очистка памяти #2
_Eldar_, тут посмотрите
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
19.02.2010, 03:56  [ТС]     "Очереди" - очистка памяти #3
Понял. Надо было было через временный указатель сделать. Но все равно не понятно. Оператор delete ведь не удаляет сам указатель, а освобождает память на которую он указывал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
//------------Выборка из очереди
Order *get(Order* beg){
    if(!beg){
        cout << "\nОчередь пуста";
        return 0;
    }
    print(*beg);
    Order *temp = beg->next;
    delete beg;
    beg = temp;
    return beg;
}
Добавлено через 1 минуту
сорри, забыл тег СРР поставить
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,505
19.02.2010, 04:12     "Очереди" - очистка памяти #4
Цитата Сообщение от _Eldar_ Посмотреть сообщение
C++
1
2
3
Order *temp = beg->next; // temp указывает на следующий за *beg объект
delete beg; // освобождается память на которую указывает beg
beg = temp; // beg указывает на следующий объект (теперь первый в очереди)
Да вроде всё правильно... А что смущает?
Когда уничтожится последний объект, функция вернёт NULL, надо этот момент отслеживать.
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
19.02.2010, 04:24  [ТС]     "Очереди" - очистка памяти #5
easybudda, смущает использование временного указателя,
C++
1
2
delete beg; // очистил память на которую указывает beg
beg = beg->next; // присвоил новое значение указателю beg
delete beg; - ведь не удаляет самого указателя
easybudda
Эксперт CЭксперт С++
9470 / 5483 / 927
Регистрация: 25.07.2009
Сообщений: 10,505
19.02.2010, 04:39     "Очереди" - очистка памяти #6
Цитата Сообщение от _Eldar_ Посмотреть сообщение
beg = beg->next;
вот так как-раз нельзя делать! после delete beg; никакого beg->next уже не будет! Для того временная переменная-указатель и нужна.
удаляется объект, на который указывал beg, получить значение переменной удалённого объекта не получится!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2010, 04:40     "Очереди" - очистка памяти
Еще ссылки по теме:

Можно ли получить адрес памяти где хранится буква "a" - C++
Всем привет! Пожалуйста объясните этот код ) char string = &quot;abcdef&quot;; cout &lt;&lt; string; // будет вывод abcdef cout &lt;&lt; *string; //...

Класс "ArrayList", похоже на проблему с выделением памяти - C++
Вроде бы все работает, ошибок не выдает... но на выходе совсем не то, похоже на проблему с выделением памяти... ArrayList.h #pragma...

напишите программу! тема "динамическое распределение памяти"! - C++
Таблица футбольного чемпионата, в котором участвуют n команд, задана своей верхней правой частью в виде последовательности чисел 0, 1 или 3...

Поиск значения в памяти приложения ("Нет" читам!) - C++
Здравствуйте, жители КиберФорума! Играл недавно в немало известную игру Sniper Elite(1 часть, мультиплеер), читеров оказалось хоть ж*п*й...


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

Или воспользуйтесь поиском по форуму:
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
19.02.2010, 04:40  [ТС]     "Очереди" - очистка памяти #7
ПОНЯТНО
Yandex
Объявления
19.02.2010, 04:40     "Очереди" - очистка памяти
Ответ Создать тему
Опции темы

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