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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2010, 21:49   #11
Chica Bond
Пользователь
 
Регистрация: 15.03.2010
Сообщений: 31
По умолчанию

Исправила!) спасибо огромное!!!!! теперь всё работает!))
Chica Bond вне форума Ответить с цитированием
Старый 02.12.2010, 23:13   #12
Chica Bond
Пользователь
 
Регистрация: 15.03.2010
Сообщений: 31
По умолчанию

блииин, всё же опять у меня проблемы.... всё работает, но только для цифр, когда на вход подаётся двузначное или ещё большее число, то сова что-то не так с памятью....
посмотрите плиз, кому-нетрудно....
Код:
//конструктор копирования:
numb::numb(const numb &p)
{
	first=new list2;
	first->prev=NULL;
	first->next=NULL;
	first->info=p.first->info;
	list2 *q=p.first->next, *w=first;
	while(q)
	{
		w->next=q;
		q->prev=w;
		q=q->next;
		w=w->next;
	}	
}
//оператор присваивания:
numb & numb::operator=(const numb &p)
{
	this->~numb();
	new(this)numb(p);
	return *this;
}
//операция сложения(по-разрядно, аналогично сложению в столбик):
numb numb::operator +(const numb &p)const
{
	numb res;
	int a=0;//сюда пишем 1, когда сумма цифр больше 9
 sum=0;
	list2 *q=end_list(*this), *w=end_list(p);
	while(q && w)
	{
		if (a==0)
			sum=q->info+w->info;
		else
		{
			sum=q->info+w->info+1;
			a=0;
		}
		if (sum>9)
		{
			res.add(sum%10);
			a=1;
		}
		else
			res.add(sum);
		sum=0;
		q=q->prev;
		w=w->prev;
	}
	while (q)
	{
		if (a>0)
		{
			sum=q->info+1;
			a=0;
		}
		else sum=q->info;
		if (sum>9)
			res.add(sum%10);
		else
			res.add(sum);
		q=q->prev;
	}
	while (w)
	{
		if (a>0)
		{
			sum=w->info+1;
			a=0;
		}
		else sum=w->info;
		if (sum>9)
			res.add(sum%10);
		else
			res.add(sum);
		w=w->prev;
	}
	res.print();// при простом распечатывании результата всё верно
	return res;
}
и ещё что интересно,если в мэйне написать, программа доходит до самого конца, т.е. до return 0 в мэйне и только там вылетает.
а если написать оператор сложения, то она зависает в конструкторе копирования

Последний раз редактировалось Chica Bond; 02.12.2010 в 23:48.
Chica Bond вне форума Ответить с цитированием
Старый 03.12.2010, 00:42   #13
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
numb & numb::operator=(const numb &p)
{
	this->~numb();
	new(this)numb(p);
	return *this;
}
НИКОГДА ТАК НЕ ДЕЛАЙТЕ!
Во-первых, удалять объект внутри функции, принадлежащей этому объекту - это просто я не знаю как откомментировать (это очень плохо и неправильно). Вместо этого лучше уж написать функцию, очищающую память и вызывать ее при необходимости - в operator= и в деструкторе, например.
Во-вторых, не стоит вызывать деструктор явно. Вместо
Код:
X *x = new X;
x -> ~X;
пишите
Код:
X *x = new X;
delete x;
Ну а теперь по поводу ошибки. Раз ошибка происходит "после последней строчки в main", то ошибка при удалении объектов, а стало быть, проблемы в деструкторе. Поэтому код оного просим в студию.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 03.12.2010, 07:53   #14
Chica Bond
Пользователь
 
Регистрация: 15.03.2010
Сообщений: 31
По умолчанию

спасибо, учту все советы)) а вот деструктор:
Код:
numb::~numb()
{
	while(first)
	{
		list2 *q=first->next;
		delete first;
		first=q;
	}
}
Chica Bond вне форума Ответить с цитированием
Старый 03.12.2010, 18:47   #15
Chica Bond
Пользователь
 
Регистрация: 15.03.2010
Сообщений: 31
По умолчанию

всё, теперь всё работает шикарно))) просто изначально криво написала конструктор копирования))) щас переделала, всё работает)) деструктор изменила, но его вызов оставила явным(в операторе присваивания)))

хотя щас проверила, со старым деструктором тоже работает, так что вся проблема в операторе копирования))
Chica Bond вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция не возвращает значения 2.0 Winlook PHP 1 10.05.2010 00:58
Функция open() возвращает неверный дескриптор devl Общие вопросы C/C++ 8 12.01.2010 20:36
Как создать функцию, которая возвращает результат - строку типа ansistring. atg C++ Builder 2 28.10.2009 18:20
Что возвращает эта функция? D[I]K Общие вопросы C/C++ 9 07.10.2009 00:32
Функция StrtoFloat не правильно возвращает число Ra88it Помощь студентам 2 02.12.2008 20:26