Двунаправленные списки

  • Автор темы keeper1
  • Дата начала
K

keeper1

#1
Здравствуйте всем!
Написал программу для составления из одной таблицы другую. Использую двунаправленный список и классы.
Вопрос в следующем. Не работают две подпрограммы: удаление записи из таблицы и считывание из бинарного файла.
Подскажите,в чем ошибка,пожалуйста.
Заранее благодарен
PS не работает - это значит программа экстренно завершает работу.
Структуры
C++:
struct person
{ char fam[30];
char im[5];
int god;
char mark[30];
char strana[30];
};
struct perech
{ char mark[30];
int ng;
};
struct node1
{ person s;
node1 *next,*pre;
};
struct node2
{ perech g;
node2 *next,*pre;
};
Удаление из таблицы:
C++:
void tabl1::Delete(int i)
{ node1 *a,*b,*c;
int j;
char ch;
if(!(i<0||i>=n+1))
{
for(j=0,a=beg1;j<(i-1);j++,a=a->next);
cout<<"Are you sure that you need delete data about "<<a->s.fam<<" "<<a->s.im<<" "
<<a->s.god<<" "<<a->s.mark<<" (y or n)"<<endl;
cin>>ch;
if(ch=='y')
{if(a==beg1)
{
beg1=a->next;
beg1->pre=NULL;
delete a;
n--;
return;
}
if(a==end1)
{
end1=a->pre;
end1->next=NULL;
delete a;
n--;
return;
}

b=a->pre;
c=a->next;
delete a;
b->next=c;
c->pre=b;
n--;
}
}
else {cout<<"Out of index\n";getch();}
}
Считывание из бинарного файла:
C++:
int tabl2::InputFileBinPerech()
{perech t;
fstream fin;
char ch[60];
cout<<"Please enter root to temp Binary file\n";
cin>>ch;
fin.open(ch,ios::in|ios::binary);
if (fin.fail())
{cout<<"Binary File is not opened.";
getch();
fin.close();
return 1;
}
fin.seekg(0,ios::end);
m=fin.tellg()/sizeof(perech);
fin.seekg(0,ios::beg);
del();
for(;fin.good();)
{
fin.read((char*)&t,sizeof(perech));
if(fin.good()){new_(t);}
}
fin.close();
cout<<"Temp file is read\n";
getch();
return 0;
}
Вспомогательные подпрограммы:
C++:
void tabl2::del()
{
node2 *a;
for(a=beg2;a!=NULL;a=beg2,beg2=a->next,delete a);
beg2=NULL;
end2=NULL;
}

void tabl2::new_(perech &t)
{node2 *t_s,*t_n;
t_n=new node2();
if(t_n==NULL) {cout<<"Error. Overload memory data.";getch();return;}
t_s=end2;
if (t_s == NULL)
{beg2=new node2;
beg2->g=t;
beg2->next=NULL;
beg2->pre=NULL;
end2=beg2;
return;
}
t_n->g=t;
t_s->next=t_n;
t_n->pre=t_s;
t_n->next=NULL;
end2=t_n;
m++;
}