c++ - 为什么这个程序会因删除命令而中断?

c++ - 为什么这个程序会因删除命令而中断?

我想从链表中删除某个元素(它是一个数字列表)。当我找到正确的数字时,我检查前一个元素是否为 NULL。如果是,它是列表的头部,我只是移动那个指针,如果不是,我重新链接元素,以便前一个元素指向要删除的元素的下一个元素。

现在,这很好用,除非我取消注释以下命令:

delete old;

现在,old 是一个指向需要删除的元素的指针。我想删除元素,而不仅仅是重新链接列表。

// zag.h - header file

#ifndef _zag_h_

#define _zag_h_

#include

using namespace std;

struct Elem {

int n;

Elem* next;

Elem(int bbr,Elem* nex = NULL){n = bbr; next = nex;}

~Elem(){delete next;}

};

class Lista {

Elem* head;

public:

Lista(){

head=NULL;

}

~Lista(){

}

void put(int broj){

Elem* temp = new Elem(broj);

Elem* n0 = NULL;

Elem* n1 = head;

while(n1!=NULL && temp->n >= n1->n){

n0 = n1;

n1 = n1->next;

}

if(n0 == NULL){

temp->next=head;

head = temp;

}

else {

n0->next = temp;

temp->next = n1;

//if(n1==NULL)tail=temp;

}

//cout << head->n << endl;

}

void remove(int num){

Elem* n1 = head;

Elem* n0 = NULL;

while(n1!=NULL && n1->n!= num){

n0 = n1;

n1 = n1->next;

}

if(n0 == NULL){

Elem* old = n1;

head = head->next;

n1 = n1->next;

delete old;

}

else {

Elem* old = n1;

n1 = n1->next;

n0->next = n1;

cout << old->n;

delete(old);

}

}//remove

void write(){

Elem* temp = head;

while(temp){

cout << temp->n << " ";

temp = temp->next;

}

cout<

} //ispisi

};

#endif

// main.cpp file

#include "zaglavlje.h"

#include

using namespace std;

void main(){

cout << "Welcome " << endl;

Lista* l = new Lista();

l->put(4);

l->put(2);

l->put(8);

l->put(7);

l->put(6);

l->put(9);

l->put(11);

l->put(15);

l->put(17);

l->put(2);

l->put(1);

l->write();

l->remove(11);

//l->remove(2);

//l->remove(2);

//l->remove(11);

//l->remove(15);

cout << "ispisujemo elemente liste nakon brisanja" << endl;

l->ispisi();

}

所以,我在列表中插入一些元素,编写列表元素(这一切似乎都很好),然后我调用一个函数来删除一个元素。之后,当我尝试编写列表(以检查元素是否真的被删除)时,我收到以下错误:

An unhandled win32 exception occurred in test.exe

调试器指向这条线

cout << temp->n << " ";

在写函数中。

无需调用 delete old 命令,一切正常。

相关文章

365bet网络足球赌博 gtv游戏竞技停播了?别急,看看是什么情况!
365bet账号被限制 10家最佳【中国正规在线外汇交易平台】推荐 ☑️ (2025) 排名
365bet网络足球赌博 cf戒指功能哪个好(CF戒指功能对比:哪个更好?)
365bet账号被限制 相机打不开是什么原因 数码相机打不开怎么办
365bet账号被限制 69秒升109,然后需要多少时间175呀?
365bet网络足球赌博 荷兰beautinow官网中文海淘网站,直邮中国教程,香水香氛和美妆护肤