Граждане всем доброго времени суток
собсно задание
/*
Целое число (длинное) представить
в виде двусвязного линейного списка.
Написать программу для сложения
2-х заданных чисел (со знаком)
произвольной длины.
*/
выдаёт ошибку обращения к такой то области памяти по окончанию работы ф-и Sum
не могу понять в чём дело
помогите кто чем может
собсно код
Код:
#include <iostream>
#include <fstream>
#include <cstring>
#include <windows.h>
using namespace std;
static char sign1, sign2, sign_result;
struct Number
{
int data;
Number *next;
Number *prev;
};
typedef Number* pNumber;
class cNumber
{
private:
pNumber cur, first;
public:
cNumber();
~cNumber();
void Point_end();
bool Empty();
void Del_cur(int &userdata);
void Del_first(int &userdata);
void Add_after_cur(int userdata);
void Add_first(int userdata);
void Form(char number[]);
void Sum(cNumber spisok1, cNumber spisok2);
void Read_prev();
void Perenos();
void Perenos1();
void SetFirst();
pNumber GetFirst();
pNumber GetCur();
};
void main()
{
::SetConsoleOutputCP(1251);
::SetConsoleCP(1251);
int abs1, abs2;
char number[100] = {0,};
cNumber spisok1, spisok2, spisok_result;
//pNumber first1 = NULL, first2 = NULL, first_result = NULL, cur1 = NULL, cur2 = NULL, cur_result = NULL;
// знак результата будет определяться ТУТ!
cout << "Введите первое число. Максимальная длина 100 символов.\nПЕРВЫЙ РАЗРЯД ДОЛЖЕН БЫТЬ ЗНАКОВЫМ\n";
cin.getline(number, 100);
sign1 = number[0];
abs1 = abs(atoi(&number[1]));
spisok1.Form(number);
cout << "Введите второе число. Максимальная длина 100 символов.\nПЕРВЫЙ РАЗРЯД ДОЛЖЕН БЫТЬ ЗНАКОВЫМ\n";
cin.getline(number, 100);
sign2 = number[0];
abs2 = abs(atoi(&number[1]));
spisok2.Form(number);
if (abs1 > abs2)
sign_result = sign1;
else
sign_result = sign2;
// якобы до сюда якобы переделал
spisok1.Point_end();
cout << "Двусвязный список первого числа " << endl << sign1;
spisok1.Read_prev();
spisok2.Point_end();
cout << "Двусвязный список второго числа " << endl << sign2;
spisok2.Read_prev();
spisok_result.Sum(spisok1, spisok2);
spisok_result.Point_end();
cout << "Результат сложения" << endl << sign_result;
spisok_result.Read_prev();
}
cNumber::cNumber()
{
cur = first = NULL;
}
cNumber::~cNumber()
{
cNumber::Point_end();
while (cur != NULL)
{
delete cur;
cur = cur->prev;
}
}
void cNumber::SetFirst()
{
first = cur;
}
pNumber cNumber::GetFirst()
{
return first;
}
pNumber cNumber::GetCur()
{
return cur;
}
void CreateFile(fstream &finout, char name[])
{
char Exit[20] = "Exit", str[100];
cout << "Конец записи = Exit" << endl;
finout.open(name, ios::out);
finout.clear();
if (finout.is_open())
{
cout << "Введите число, максимальное количество разрядов - 100\nПервый разряд ДОЛЖЕН быть знаковым" << endl;
cin.getline(str, 100);
while (strcmp(Exit, str) != 0)
{
finout << str;
finout.put('\n');
cout << "Введите число" << endl;
cin.getline(str, 100);
}
finout.close();
}
else
{
cout << "Не удалось открыть файл" << endl;
exit(1);
}
}