编写 SLL 时获取 Abort trap 6
Getting Abort trap 6 while coding SLL
我是 C++ 新手。尝试做一个简单的单向链表程序。代码如下。我在这里创建了一个节点 class、SLL class 并相应地运行。
#include <iostream>
using namespace std;
class Node{
private:
int data;
Node* next;
friend class SLL;
};
class SLL{
public:
SLL();
~SLL();
bool empty() const;
const int& front() const;
void addFront(const int& e);
void removeFront();
void printList();
private:
Node* head;
};
SLL::SLL()
:head(NULL){ }
SLL::~SLL(){
while(!empty())
removeFront();
}
bool SLL::empty() const{
return head == NULL;
}
void SLL::removeFront(){
Node* temp = head;
head = temp->next;
delete temp;
}
void SLL::addFront(const int& e){
Node* n = new Node;
n->data = e;
n->next = head;
head = n;
}
void SLL::printList(){
Node* temp = head;
// int n =0 ;
while(temp->next){
// n++;
cout<< temp->data << " ";
temp = temp->next;
}
delete temp;
}
int main(){
SLL a;
a.addFront(1);
a.printList();
}
当我编译程序时,出现以下错误。
ol(36664,0x7fff8a6e0340) malloc: *** error for object 0x7fb055402820: pointer being freedwas not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
为什么会出现这个错误?解决方案是什么?
printList
中的delete temp;
不会破坏变量temp
;局部变量已经自动销毁。 (确实,技术术语是“自动存储持续时间”。)毕竟
中不需要(或可能)delete
void f() {
int i=std::rand();
std::cout << i;
}
它破坏了 对象 temp
指向,从而破坏了你的列表。
每个new
只使用一次delete
:在这种情况下,这意味着平衡addFront
和removeFront
(这应该具有直观意义),包括在析构函数——你已经在做了。
我是 C++ 新手。尝试做一个简单的单向链表程序。代码如下。我在这里创建了一个节点 class、SLL class 并相应地运行。
#include <iostream>
using namespace std;
class Node{
private:
int data;
Node* next;
friend class SLL;
};
class SLL{
public:
SLL();
~SLL();
bool empty() const;
const int& front() const;
void addFront(const int& e);
void removeFront();
void printList();
private:
Node* head;
};
SLL::SLL()
:head(NULL){ }
SLL::~SLL(){
while(!empty())
removeFront();
}
bool SLL::empty() const{
return head == NULL;
}
void SLL::removeFront(){
Node* temp = head;
head = temp->next;
delete temp;
}
void SLL::addFront(const int& e){
Node* n = new Node;
n->data = e;
n->next = head;
head = n;
}
void SLL::printList(){
Node* temp = head;
// int n =0 ;
while(temp->next){
// n++;
cout<< temp->data << " ";
temp = temp->next;
}
delete temp;
}
int main(){
SLL a;
a.addFront(1);
a.printList();
}
当我编译程序时,出现以下错误。
ol(36664,0x7fff8a6e0340) malloc: *** error for object 0x7fb055402820: pointer being freedwas not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
为什么会出现这个错误?解决方案是什么?
printList
中的delete temp;
不会破坏变量temp
;局部变量已经自动销毁。 (确实,技术术语是“自动存储持续时间”。)毕竟
delete
void f() {
int i=std::rand();
std::cout << i;
}
它破坏了 对象 temp
指向,从而破坏了你的列表。
每个new
只使用一次delete
:在这种情况下,这意味着平衡addFront
和removeFront
(这应该具有直观意义),包括在析构函数——你已经在做了。