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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2011, 16:11   #1
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
Печаль Динамическая память С++

Вообщем задача определить класс "список", добавить всякие оператор функции .
Ругается на освобождение памяти при окончании main ... конструктор копий определил. Даже знаю в чем ошибка - в оператор функции operator--. когда делаю ++.. подскажите как это исправить. красным выделил места ошибок.



Код:
/******************************* QUEUE *******************************/

class queue {
	char *que;
	int top;
	char name[20];

public:
	queue(char* _name="") {
		top=0;
		que = new char[100];
		strcpy(que,"");
		strcpy(name,_name);
	}
	queue(const queue &a);
	~queue() { delete[] que; }
	queue operator +(char ch);
	queue operator +=(queue obj);
	queue operator --();
//	queue operator -(queue obj);
	queue operator =(queue obj);
	void show() { std::cout << "queue \'"<< name << "\' info: "<< que << "\ntop: " << top << '\n'; }
};

queue::queue(const queue &a) {

	top=a.top;
	que = new char[100];
	strcpy(que,a.que);
	strcpy(name,a.name);
}

queue queue::operator +(char ch) {
	
	queue temp;

	strcpy(temp.que,que);
	temp.top=top;

	std::cout << '\''<< ch << '\''<< " added to queue " << name << "\n";

	temp.que[temp.top]=ch;
	temp.que[temp.top+1]='\0';
	temp.top++;

	return temp;
}

queue queue::operator --() {

	std::cout << '\''<< que[0] << '\''<< " popped out of queue " << name << '\n';
	que++;
	top--;

	return *this;
}

queue queue::operator =(queue obj) {

	strcpy(que,obj.que);
	top=obj.top;

	return *this;
}

queue queue::operator +=(queue obj) {

	strcat(que,obj.que);
	top+=obj.top;

	std::cout << "queue \'" << name << "\' added to queue \'" << obj.name << "\'\n";

	return *this;
}







int main()
{

	queue a("a");

	a=a+'z';
	a=a+'r';
	a=a+'q';
	
	--a;
	--a;

	queue b("b");

	b=b+'w';
	a+=b;

	a.show();

	return 0;
}
onewho вне форума Ответить с цитированием
Старый 04.02.2011, 16:58   #2
Ирискин
 
Регистрация: 04.02.2011
Сообщений: 7
По умолчанию

я только-только начал программировать, поэтому не ругайтесь, если фигню скажу.
que - переменная чар? что там прибавляется? о_о
Ирискин вне форума Ответить с цитированием
Старый 04.02.2011, 17:14   #3
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

que -переменная указатель на символ, инкрементируя её мы увеличивает указатель на 1 байт тем самым указывая теперь на 2ой символ строки которая находится по que. из строки "привет" получим строку "ривет", вот для чего это делается. но возникают проблемы с очисткой памяти, тк наш указатель теперь указывает на другое место. типа того.

можно заменить que++;
на
for (int i=0; i<strlen(que); i++) que[i]=que[i+1];
но уж очень мне это не нравится.

Последний раз редактировалось Stilet; 05.02.2011 в 16:02.
onewho вне форума Ответить с цитированием
Старый 04.02.2011, 17:21   #4
Д_М
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 92
По умолчанию

Можно так:
Добавить в класс мембер char* que_base;

В конструктрах:
que = que_base = new ...

В деструкторе
delete que_base;

que_base больше нигде не трогать
Д_М вне форума Ответить с цитированием
Старый 04.02.2011, 17:27   #5
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

да, действительно, просто сделать 2ой указатель на тот же участок памяти и не трогать его.
только delete[] а не delete
спасибо большое!
onewho вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая память Ledom Общие вопросы C/C++ 9 26.11.2010 00:07
Динамическая память zhenya.ya Помощь студентам 1 22.09.2010 08:43
Динамическая память Astat Помощь студентам 1 30.06.2010 20:40
Динамическая память PaulSev Общие вопросы Delphi 12 25.03.2010 09:07
динамическая память в си Serjuk Помощь студентам 0 27.12.2009 13:54