Теперь я вижу весь код, проблема очень проста. Ваша функция deletebeg удаляет начальный узел с delete
, но вы не выделяете узел с new
. Вы должны только delete
памяти, если вы создали его с помощью new
.
Обычно, когда люди пишут классы связанного списка, они распределяют узлы внутри методов списка, используя new
. Тогда они могут безопасно delete
узлы внутри методов. Вы делаете удаления, но вы не используете новый. Поэтому вам нужно переписать вашу основную функцию следующим образом:
int main()
{
doublelist list1;
list1.insertbeg(8); // add 8 to beginning of list
list1.insertbeg(7); // add 7 to beginning of list
list1.insertafter(4,1); // add 4 after first item of list
list1.insertend(9); // add 9 to end of list
list1.deletebeg();
}
Тогда вам нужно переписать ваши методы, как это
void insertbeg(int value)//insert beginning
{
nodeb* a = new nodeb(value); // allocate node inside of method using new
if(head1==0)
{
head1=a;
head2=a;
a->next=0;
a->pre=0;
}
else
{
nodeb *ptr=head1;
ptr->pre=a;
a->pre=0;
a->next=ptr;
head1=a;
}
}
Я только показал insertbeg, вам нужно изменить все ваши методы вставки таким же образом.
Я не обещаю, что это единственная проблема, но внесите это изменение, и вы будете на правильном пути. Если у вас возникли проблемы, отправьте сообщение снова, но помните отправьте полный код . Это единственный способ получить помощь в решении подобных проблем.