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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2014, 02:39   #1
tolikprankster
Пользователь
 
Регистрация: 09.02.2013
Сообщений: 60
По умолчанию Односвязный кольцевой список

создал список односвязный кольцевой. Создает список. добавляю эл-нты, по истечению 2 екунд - они сами удаляются. Всё норм, но потом ещё раз начинаю добавлять(в этот же список(сам список не удаляю)), вылетает ошибка, повреждение кучи.
Код:
struct Bullet
{
	int fireTime;
	Bullet *next;
};

class BulletList
{
private:
	Bullet *head, *last;
	int size;
public:
	BulletList()
        {
		head  = last = NULL;
		size = 0;
	}
	void add( int d)
	{
		Bullet *current;
		current = new Bullet;
		current->fireTime = d;
		current -> next = head;
		if(!head) 
		{
			head = last = current;
			head -> next = head;

		}
		else 
			{ 
				last->next = current;
				last=current;
			}	

		size++;
	}

int BulletListElementsCount()
{
	return size;
}

void DeleteOldBullets()
{
	Bullet *temp = head;
		for(int i = 0; i<size; i++)
			temp = temp->next;
			if( (GetTickCount()- (temp->next->fireTime)) > 2000)
			{
				if(head == temp->next)
					{
						head = temp;
					}
				Bullet *change;
				change = temp->next;
				temp->next = change -> next;
				delete change;
				size--;
			}
}

int ReturnLastBulletFireTime()
{
	int max = 0;
	Bullet *temp = head; 
	if(size>0)
	for(int i =0 ; i< size; i++)
	{
		temp = temp->next;
		if((temp->next->fireTime) > max)
			max = (temp->next->fireTime);
	}
	
	return max;
}

~BulletList()
{
		while (size!=0) 
    {
     Bullet *temp = head->next;    
     delete head; 
     head = temp;
     size--; 
    }
		countOfBullets = 0;
}
};

Последний раз редактировалось tolikprankster; 29.08.2014 в 03:07.
tolikprankster вне форума Ответить с цитированием
Старый 29.08.2014, 03:14   #2
tolikprankster
Пользователь
 
Регистрация: 09.02.2013
Сообщений: 60
По умолчанию

Фух, разобрался. В самомконце процедуры удаления написал:
if(size==0) head = NULL;
head ссылался на мусор.
tolikprankster вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Односвязный кольцевой список dan1219 Помощь студентам 1 16.12.2013 00:10
Проверьте кольцевой односвязный список с фиктивным элементом ViatorTK Общие вопросы C/C++ 1 19.11.2013 07:44
КОЛЬЦЕВОЙ ОДНОСВЯЗНЫЙ СПИСОК __FIRST__ Помощь студентам 0 01.11.2008 17:16
Кольцевой односвязный список jukk Общие вопросы Delphi 3 22.12.2006 12:10