Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2012, 11:47   #1
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию однонаправленная очередь

Проблема следующая,это одноноправленная очередь.

1)Создую очередь,удалаю элементы,все хорошо,НО тут же хочу создать заново очередь,пишет при добавлении элемента порвеждение кучи,помогите поправить.

Код:
ОС Windows инициировала точку останова в aaa.exe.

Это может быть вызвано повреждением кучи и указывает на ошибку в aaa.exe или в одной из загруженных им DLL.

Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит aaa.exe

Выведенное на экран окно содержит дополнительные данные для диагностики ошибки
2)Нужно было добавить "+" в конец элемент и удалить "-" из начало ,сделать перегруженными,я правильно сделал?если нет скажите как должно выглядеть


.h

Код:
#include "stdafx.h"
#include <string.h>
#include <iostream>
#include <conio.h>

#ifndef Turn_H 
#define Turn_H

using namespace std;

class Turn
{
private:
        struct Point
		{
                int key;//информативное поле
                Point *next;
        };
		Point* first;		//указатель на первый элемент списка
		Point* current;		//указатель на текущий элемент списка

public:
        Turn();
        virtual ~Turn();
		void operator +(int);
		void operator -(int&);
		void print();
};
#endif
.cpp

Код:
#include "stdafx.h"
#include "Turn.h"

Turn::Turn()
{
	first = 0;
    current = 0;
}

Turn::~Turn()
{
	if(first)//если список не пуст
	{
		current=first;
	}
	while(first)//пока список не пуст
	{
		first=first->next;//взяли следующий элемент
		delete current;//освобождение памяти.Удалили текущий
		current=first;
	}
}

void Turn::operator + (int a)
{
    Point* ph = new Point;
	ph->key=a;           //заполнение информатвного поля
	ph->next = 0;
    if (current!=0)
	{
        current->next = ph;
        current = ph;
    }
    else
	{
		ph->next = 0;
        first = ph;
        current = ph;
    }
}

void Turn::operator - (int &a)
{
	if(first)
	{
   // a = first->key;
    Point* ph = first;
    first = first->next;
    delete ph;
	cout<<"Элемент успешно удален....";
	}
	else
	{
	     cout<<"Список пуст!";	
	}
}

void Turn::print()
{
	if(first)
	{
    Point* temp=first;
	cout<<"Список: ";
    while(temp)
    {
        cout << " " << temp->key;
        temp = temp->next;
    }
    cout << endl;
	}
	else
	{
		cout<<"Список пуст!";
	}
}
main.cpp
Код:
#include "stdafx.h"
#include "Turn.h"

int main()
{
    setlocale(LC_ALL,"Russian");
    Turn w; 
	int b=0,a;
    while(true)
	{
        cout<<"1) Добавить элемент в конец очереди"<<endl;
        cout<<"2) Вывести на экран очередь"<<endl;
        cout<<"3) Извлечь элемент из начала очереди(удалить)"<<endl;
		cout<<"4) Выход"<<endl<<endl;
        cout<<"Ввод: "; 
		cin>>b;
		switch(b)
		{
		case 1 : 
		
            system("cls");
            cout<<"Введите значение: ";
            cin>>a;
			w+a;
			system("cls");
			continue;
        
		case 2:

                system("cls");
                w.print();
			    getch();
			    system("cls");
			    continue;

		case 3:
		
			    system("cls");
			    w-a;
			    getch();
			    system("cls");
			    continue;
        
		case 4:
		
                 break;
        
		default: cout<<"Error!"<<endl<<endl;
			     continue;
		}
		break;
    }
	return 0;
}
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 29.10.2012, 12:47   #2
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Ошибки поправил в нескольких местах, например вместо

Код:
void Turn::operator + (int a)
{
    Point* ph = new Point;
	ph->key=a; 
	ph->next = 0;
    if (current!=0)
	{
        current->next = ph;
        current = ph;
    }
    else
	{
		ph->next = 0;
        first = ph;
        current = ph;
    }
}
написал

Код:
void Turn::operator + (int a)
{
    Point* ph = new Point;
	ph->key=a; 
	ph->next = 0;
    if (first)
	{
        current->next = ph;       
		current = current->next;
    }
    else
	{
        first = ph;
        current = ph;
    }
	cout<<"Элемент добавлен";
}

Перегрузку верно сделал саму?
a.n.o.n.i.m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очередь в СИ Savelia Помощь студентам 4 12.06.2011 14:56
очередь blacktener Общие вопросы C/C++ 1 18.04.2011 02:49
Очередь С++ phantom4eg Фриланс 1 25.04.2010 00:54
Очередь skiffter Помощь студентам 2 03.12.2009 17:39
Очередь Юлькин Общие вопросы C/C++ 4 30.05.2009 16:00