| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Стек. ошибка удаления иногда возникает |
| Автор: ника18 16.12.2010, 22:11 | ||
| Описать класс Lifo, реализовать стек произвольного размера для хранения целых чисел, добавление и извлечение одиночного элемента из стека, реализовать при помощи перегрузки операций >, <. Добавлять последовательность элементов, перегрузив оператор >>. Вывод на экран - <<. Проблема в реализации, иногда удаление норм работает, а иногда при удаление прога вылетает Пример когда вылетает Это реализация сейчас в стеке один элемент, равный 0 Выберете операцию: 1-загрузить в стек один элемент; 2-загрузить в стек несколько элементов; 3-вывести последний загруженный эл-т и удалить его; 4-вывести весь стек 1 введите элемент 2 Выберете операцию: 1-загрузить в стек один элемент; 2-загрузить в стек несколько элементов; 3-вывести последний загруженный эл-т и удалить его; 4-вывести весь стек 2 сколько еще элементов будет загружено в стек? 4 Введите1элемент 4 Введите2элемент 5 Введите3элемент 6 Введите4элемент 7 Выберете операцию: 1-загрузить в стек один элемент; 2-загрузить в стек несколько элементов; 3-вывести последний загруженный эл-т и удалить его; 4-вывести весь стек 4 Весь стек: 7 6 5 4 2 0 Выберете операцию: 1-загрузить в стек один элемент; 2-загрузить в стек несколько элементов; 3-вывести последний загруженный эл-т и удалить его; 4-вывести весь стек 3 вводим 3 и прога вылетает, почему так и как это исправить? Код C++
|
| Автор: Crafty 16.12.2010, 22:26 |
| Твой класс работает с динамической памятью, а деструктор у тебя отсутствует. Не совсем логично перегружать операторы больше и меньше для заполнения стека, луычше уж создать ф-ции члeны push и pop. И еще поидеи конструктор по умолчанию не должен заполнять стек, а должен только присвоить указателю на стек NULL. |
| Автор: ника18 16.12.2010, 23:17 |
| а меня думаешь спрашивали, как логичнее???? это задание такое выше читай |
| Автор: toxx 16.12.2010, 23:37 | ||
будь проще и люди к тебе потянуться а по теме, ты удаляешь весь стэк, и хочешь чтобы он потом тебе вывел элемент? класно |
| Автор: ника18 17.12.2010, 01:07 |
| честно не совсем поняла я с сети прогу брала, эту часть и сама в ней не могу разобраться |
| Автор: Чoо 17.12.2010, 02:38 | ||||
| ника18, если мы "эмулируем" работу стека, то при выводе элементов мы их извлекаем из стека, то бишь удаляем. Если бы сохраняли, то это был бы уже не стек, а список. Проще стек ппредставить как стопку тарелок. Положили тарелку в стопку - добавили элемент в стек. Положили много тарелок. Затем, что бы вытащить первую, нам надо по очереди вытащить все те что сверху - извлечь из стека. Ну или другими словами, помещая в стек, мы сохраняем в нем элемент, извлекая из стека - удаляем элемент. При чем, нельзя извлечь элемент из середины. а программа вылетает, потому что не сделали контроль: если стек пуст, то все-равно программа пытается извлечь элемент. вопщем ща гляну чо сделать можно Добавлено @ 02:51
вот эти две функции замените. Хотя реализация мне не нравится. Цикл, в котором работаем со стеком, не бесконечный. Ну и меню надо чуть переписать:
Что элемент будет удален писать не надо, и так понятно - стек же. |