为什么我遇到此代码的分段错误?此代码几乎没有运行,因此构造函数或复制构造函数中可能存在错误
Why am i getting a segmentation fault with this code? This code is barely running so there's probably an error in the constructor or copy constructor
我不断收到此代码的分段错误。我不明白为什么。构造函数/析构函数中是否存在一些明显的错误,或者我使用指针的方式是否存在问题?
template <class T>
LinkedList<T>::LinkedList()
{
head=NULL;
}
复制构造函数
template <class T>
LinkedList<T>::LinkedList(const LinkedList<T>& otherLinkedList)
{
head= new ListItem<T> (NULL);
ListItem<T>* temp;
ListItem<T>* writeto;
temp=otherLinkedList.getHead();
writeto=head;
while (temp->next != NULL)
{
writeto->value=temp->value;
temp=temp->next;
writeto=writeto->next;
writeto= new ListItem<T> (NULL);
}
writeto=NULL;
ListItem<T>* pre;
pre=writeto;
while (pre->prev != head)
{
pre=pre->prev;
writeto->prev=pre; /
}
}
破坏者
template <class T>
LinkedList<T>::~LinkedList()
{
ListItem <T> *temp;
temp=head;
while (temp->next != NULL)
{
temp=temp->next;
delete temp->prev;
}
delete temp;
delete head;
}
在链表的头部插入新节点
template <class T>
void LinkedList<T>::insertAtHead(T item)
{
ListItem <T> *newnode= new ListItem <T>(item);
if(head==NULL)
{
head=newnode;newnode->next=NULL;
}
{
newnode->next=head;
head->prev=newnode;
head=newnode;
}
}
// INSERTS NEW NODE AT TAIL OF LIST
template <class T>
void LinkedList<T>::insertAtTail(T item)
{
ListItem <T> *newnode;
newnode = new ListItem <T> (item);
//newnode->value=item;
if(head==NULL)
{
head=newnode;
newnode->next=NULL;
}
{
ListItem <T> *here=head;
while (here->next != NULL)
{
here=here->next;
}
here->next= newnode;
newnode->prev=here;
newnode->next=NULL;
}
}
您需要
正确使用if/else
。
当你写:
if(head==NULL)
{
head=newnode;newnode->next=NULL;
}
{
newnode->next=head;
head->prev=newnode;
head=newnode;
}
如果出现head == NULL
,两个块都将被激活。
你应该使用 else,像这样:
if(head==NULL)
{
head=newnode;newnode->next=NULL;
}
else
{
newnode->next=head;
head->prev=newnode;
head=newnode;
}
- 在您的复制构造函数中,如果
otherLinkedList.getHead()
返回NULL
怎么办?这会将temp
设置为NULL
,取消引用NULL
将是未定义的行为。这意味着您刚刚创建了一个空链表并尝试从中复制。 - 另一种可能性是,在析构函数中,如果列表为空或列表只有一个元素,则
delete head
将尝试删除对象 2 次,这可能会导致错误
相关文章:
- 将鼠标悬停在问题上时与预期">"相关的代码错误
- VI工作室代码错误无法打开输出文件主.exe
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- 有关矩阵的代码错误导致分段错误(内核转储)
- C++ Schannel POST 400 错误代码错误请求
- Java 本机访问代码错误:"Invalid memory access"
- 代码错误修改
- C++代码错误分配
- "_FCbuild"不能用作函数 - C/C++ 代码错误
- 我的代码错误类型警告 1 警告 C4018 和更多错误
- 代码错误(从 1 到 100 找到质数)
- OpenCV VisualStudio,C 代码错误尝试访问像素
- 当我使用的教程完全没有错误时,为什么我的代码错误
- 简单的NOOB C 输入/输出问题:代码错误
- 为什么enumProcessModules返回false值和299代码错误
- WinhttpSetoption()失败设置TLSV1.2,带有错误代码错误_internet_incorrect_ha
- 苹果安全传输代码错误
- C++ - 国际象棋主教移动代码错误
- 导入Python库时,嵌入了Python代码错误
- 编译提升C 代码错误