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

Использование деструктора в односвязном списке с++

06.05.2017, 14:17. Показов 1216. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Нужна срочная помощь!!!
Есть реализация односвязного списка в котором узел - класс, а не структура.
Вначале программы произвожу выделение памяти для списка:
C++
1
slist* sl = new slist();
Список заполняется объектами(эти объекты лежат в массиве) определенного класса в котором есть 2 поля(поля заполняются рандомом).
C++
1
2
3
4
5
6
 for(int i = 0; i<arrsize; i++)
        {
         nodarr[i] = new node();
         nodarr[i]->v = vampire(rand()%101,rand()%2);
         cout << nodarr[i]->v; (тут выводятся поля, оператор вывода перегружен)
        }
Далее происходит добавление в список :
C++
1
2
3
4
for(int i=0;i<arrsize;i++)
                {
                  sl->AddHead(*nodarr[i]);
                }
При повторном генерировании рандомных нодов и заполнении мне необходимо удалить все ноды(кроме головы) в списке и для этого я использую описанный деструктор.
C++
1
delete sl;
Проблема заключается в том, что на 3-ий раз генерации нодов(срабатывает второй раз
C++
1
delete sl;
) происходит ошибка , которую вызывает этот delete - returned 139(0x8B). Пытаюсь отладить, остановив брекпоинт на
C++
1
delete sl;
, но на второй раз оно даже не заходит внутрь инструкций
C++
1
delete sl;
.
Если попробовать выделать память каждый раз после удалении списка(вызова delete), то все работает. Но я не пойму почему без этого не работает , ведь в деструкторе я описал только удаление нодов, список я не удалял.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.05.2017, 14:17
Ответы с готовыми решениями:

Конструктор в односвязном списке
В общем, я только начинаю разбираться в программировании, и у меня возник такой вопрос: как работает конструктор, а именно мне нужно...

Стек на односвязном списке
#include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;malloc.h&gt; #define STACK_OVERFLOW -100 #define...

Ошибка в односвязном списке
Помогите решить эти 2 проблемы C4101: NextNode: неиспользованная локальная переменная (в 118 строке) C4703: используется потенциально...

5
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
06.05.2017, 14:29
kesyk, Очень сложно помогать при таком скудном описании. Кода нужно больше кода показывать, а в идеале, предоставить минимальный компилируемый пример, воспроизводящий ошибку.

В любом случае, если было сделано
C++
1
delete sl;
то обращаться к данным объекта, на который указывает sl уже нельзя. Память для него была освобождена. Т.е. именно, что тут удалился и объект списка, и узлы тоже, если в его деструкторе было описано их удаление.
0
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
06.05.2017, 14:30
мда, проблемный код, в котором всякие там delete вызываются вы посчитали не нужным приводить здесь? разумный ход.
0
0 / 0 / 0
Регистрация: 24.10.2016
Сообщений: 8
06.05.2017, 16:17  [ТС]
Так в деструкторе я описал очищение только от узлов списка. Получается , что список все равно очищается полностью? Тогда как сделать,чтобы не было ошибки на этом месте? Законно ли в качестве решения повторно выделять память для списка, после того как удалили его?
0
284 / 232 / 114
Регистрация: 07.09.2016
Сообщений: 584
06.05.2017, 16:24
ну раз сообщения вы не читаете, то вот решение конкретно вашей проблемы:

вы спрашиваете законно ли ...
да так можно. а можно ничего не делать. зачем удалять и потом создавать. эффективнее вообще ничего не делать.
результат будет тем же. в памяти что-то будет находится. но, вдобавок к этому вы получаете и решение проблемы
которая возникает у вас при некоторых вызовах delete. Итого:
вообще удалите из кода все delete
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
06.05.2017, 16:32
Цитата Сообщение от kesyk Посмотреть сообщение
Так в деструкторе я описал очищение только от узлов списка. Получается , что список все равно очищается полностью?
Деструктор вызывается при уничтожении объекта.
Может быть стоит повторить эти темы в своем учебнике, прежде чем продолжать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.05.2017, 16:32
Помогаю со студенческими работами здесь

Ошибка в односвязном списке
Ошибка в функции вывод на экран информации содержащую список. Название функции Print. Ошибка: #include &lt;stdio.h&gt; ...

Ошибка в односвязном списке
#include&lt;iostream&gt; #include&lt;clocale&gt; using namespace std; #define DEBUG class Monom{ protected: int...

Поиск в односвязном списке
Добрый всем день. Знаю что тема неоднократно поднималась. Помогите реализовать поиск по односвязному списку. Сильно не пинайте, я только...

Указатели в односвязном списке
Хочу создать код , в котором пользователь заполняет данные по вопросам , и выводит их на экран . Вроде написал, но в нескольких строк...

Remove_at() в односвязном списке
Привет. Не пойму как в данном(рабочем) коде, при удалении элемента посреди списка, предыдущему элементу дается указатель на следующий (то...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru