我的堆栈的打印代码给出了分段错误错误,不知道我哪里出错了。

时间:2014-06-19 20:10:49

标签: c++

我在java中实际上更舒服,但我也想学习C ++,所以我开始编写过去几天的编码,然后我编写了这个堆栈的代码,这让我很难过。尝试在最后一个节点打印堆栈时,它会出现分段错误。

请指导我出错的地方以及此代码中可以更好地完成的任何错误。

堆栈类的代码:

#include <iostream>
#include "node.h"

using namespace std;
class Stack{
public:
    Node *topNodePtr;

    Stack(){
         topNodePtr = NULL;
    }

    void push(string data){
        Node *tempNodePtr = new Node(data);
        if(this->topNodePtr == NULL){
            topNodePtr = tempNodePtr;
        }
        else{
            tempNodePtr->next = topNodePtr;
            topNodePtr = tempNodePtr;
        }
    }

    void print(){
        if(this->topNodePtr == NULL){
            cout<<"The stack is empty right now select push     to add new Nodes to the stack\n";
        }
        else{
            Node *tempNodePtr;
            tempNodePtr = this->topNodePtr;
            cout << "NULL" <<endl;
            while(tempNodePtr != NULL){
                cout << "^" <<endl;
                cout << "|" <<endl;
                cout << tempNodePtr->data<<endl;
                tempNodePtr = tempNodePtr->next;
            }
        }   
    }
};

int main(){
cout << "Menu\n";
cout << "1. Push\n";
cout << "2. Print\n";
cout << "-1. Exit\n";
int n = -1;
cin >> n;
cout << "Select n : ";
Stack *s;
do{
    if(n == 1){
        string str;
        cout << "Enter data : ";
        cin >> str;
        s->push(str);
    }
    else if(n == 2){
           s->print();
    }
    else{
        cout << "Select smthng from the list\n";
    }
    cout << "Select n : ";
    cin >> n;
}while(n != -1);
return 0;
} 

节点类的代码:

#include <iostream>
#include <string>
#include "node.h"

using namespace std;

Node::Node(string data){
this->data = data;
this->next = NULL;
}

node.h的代码:

#ifndef NODE_H
#define NODE_H
#include <string>

class Node{
public:
    std::string data;
    Node *next;
    Node(std::string data);
};
#endif

2 个答案:

答案 0 :(得分:2)

这一行:

Stack *s;

应该是:

Stack *s = new Stack;

或者你可以这样做:

Stack s;

然后将main()中的来电更改为:

s.push(str);

s.print();

答案 1 :(得分:0)

这是有问题的代码。

Node::Node(string data){
this->data = data;
this->next = NULL;
}

函数datathis->data内部相同。将其更改为:

Node::Node(string d){
this->data = d;
this->next = NULL;
}

或更好:

Node::Node(string d): data(d), next(NULL) {}