每次运行它都会给我这个错误分段错误;核心倾销; 我试图在c ++中做一个linkedStack。 我的代码是:
Node.h
class Node {
public:
Node(int element);
const int& getElement()const;
Node *getNext() const;
void setNext(Node *e);
Node(const Node& orig);
virtual ~Node();
private:
int element;
Node *next;
};
Node.cpp
#include "Node.h"
Node::Node(int element) {
this->element=element;
}
const int& Node::getElement() const{
return element;
}
Node * Node::getNext() const{
return next;
}
void Node::setNext(Node *e){
next=e;
}
Node::Node(const Node& orig) {
}
Node::~Node() {
}
LinkedStack.h
#include "Node.h"
#include <iostream>
#include "EmptyException.h"
class LinkedStack {
public:
LinkedStack();
int size() const;
const Node& top() const;
void push(const int& element);
void pop();
void print();
LinkedStack(const LinkedStack& orig);
virtual ~LinkedStack();
private:
Node *front=NULL;
int num_elements;
};
LinkedStack.cpp
#include "LinkedStack.h"
using namespace std;
LinkedStack::LinkedStack() {
}
int LinkedStack::size() const{
return num_elements;
}
const Node& LinkedStack::top() const{
return *front;
}
void LinkedStack::push(const int& element){
Node *newfront=new Node(element);
newfront->setNext(front);
front=newfront;
delete newfront;
num_elements++;
}
void LinkedStack::pop(){
if(num_elements==0){
throw EmptyException();
}
else{
Node *oldfront=front;
front=front->getNext();
num_elements--;
}
}
void LinkedStack::print(){
Node *temp=front;
while(temp != __null){
cout<<temp->getElement()<<endl;
temp=temp->getNext();
}
cout<<""<<endl;
}
LinkedStack::LinkedStack(const LinkedStack& orig) {
}
LinkedStack::~LinkedStack() {
}
的main.cpp
#include <cstdlib>
#include <iostream>
#include <string>
#include "LinkedStack.h"
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
string menu[]={"1.Afegir","2.Eliminar","3.Mostrar","4.Sortir"};
int opc,element;
LinkedStack Stack;
do{
for(int i=0;i<4;i++){
cout<<menu[i]<<endl;
}
cout<<"Selecciona una opció"; cin>>opc; cout<<""<<endl;
switch(opc){
case 1:
cout<<"Que vols afegir?... "; cin>>element; cout<<""<<endl;
Stack.push(element);
break;
case 2:
cout<<"Eliminant.... "<<endl;
Stack.pop();
break;
case 3:
Stack.print();
break;
}
}while(opc!=4);
return 0;
}
这就是全部。 当我尝试第一个选项(推送)时没有问题,但是当我尝试弹出或打印堆栈时,它会给我核心转储:分段错误错误。
我认为这个问题是关于指针的问题(??)但是我仍然不知道在哪里或如何。
如果你能提供帮助,那就太棒了^^
答案 0 :(得分:2)
push
方法存在问题导致pop
中的细分方法。在以下几行
newfront->setNext(front);
front=newfront;
delete newfront;
您可以通过front
将下一个节点设置为指向对象,稍后将删除这些节点,因为front=newfront
设置了指向同一对象的指针。
分段错误出现在
行front=front->getNext();
取消引用null对象。
答案 1 :(得分:1)
遵循 Neil Butterworth 的思路。什么是__null
?它是你定义的宏吗?
使用nullptr
。
void LinkedStack::print(){
Node *temp = front;
while(temp != nullptr){ // compare it against nullptr if this is Modern C++ (e.g. C++11). For previous C++ standards you can use temp != 0 or !temp
cout << temp->getElement()<<endl;
temp = temp->getNext();
}
cout << endl;
}
此外,正如 aschepler 所述,您的节点构造函数需要在空值旁边设置。
Node::Node(int element) {
this->element = element;
this->next = nullptr;
}