Я пытаюсь реализовать базовый стек, чтобы увеличить понимание стеков. Я смущен, почему я могу правильно вставить в стек, но я не могу попсовать стек, я получаю ошибку seg.Pop (char &) fcn from stack of char's
Это мой файл заголовка
#include <iostream>
using namespace std;
class Stack {
public:
Stack(int = 10);
Stack(const Stack&);
~Stack();
Stack& operator=(const Stack&);
bool push(char);
bool pop(char &);
bool empty() const;
bool full() const;
bool clear();
bool operator==(const Stack&) const;
//friend ostream& operator<<(ostream&, const Stack&);
private:
int max;
int top;
int actual; //only used in stack (stay) implementation
char* data;
};
это мой файл реализации соответствующей информации включены только
#include <iostream>
#include "stack.h"
using namespace std;
const int MAX = 9;
Stack::Stack(int a) {
max = a;
char *data = new char[a];
int top = 0;
}
Stack::~Stack()
{
delete[] data;
data = NULL;
}
bool Stack::push(char c)
{
if(top==9)
{
cout << "stack is full" <<endl;
return false;
}
else
top++;
return c;
}
bool Stack::pop(char &c)
{
if(top==-1)
{
cout << "Stack is empty" << endl;
return false;
}
c = data[top];
top--;
return c;
}
вот мой тестовый файл
#include <iostream>
#include "stack.h"
//#include "queue.h"
using namespace std;
int main()
{
Stack *stack = new Stack(10);
char s = 's';
char t = 't';
char a = 'a';
char c = 'c';
char k = 'k';
stack->push(s);
stack->push(t);
stack->push(a);
stack->push(c);
stack->push(k);
// this is where it seg faults
stack->pop(s);
stack->pop(t);
stack->pop(a);
return 0;
}
Вы инициализируете 'top' до 0, но вы проверяете, равен ли он -1, чтобы определить, является ли он пустым. Один из этих двух не прав. Как написано, вы можете построить 'Stack', а затем сразу же вызвать' pop() '(теоретически) успешно. Ваш 'push()' также никогда не переносит переданное значение в ваш массив. – cdhowie
@cdhowie я исправил свою инициализацию, должно быть, была опечатка. Как мне нужно изменить push, чтобы на самом деле поместить значение, и pop, чтобы вывести значение? – matt