这两个代码都差不多,为什么第二份运行结果是错的

1、#include
using namespace std;
class mystack
{
private:
int* data;
int top;
public:
//初始化栈
mystack()
{
data = new int[100];
top = -1;
}

//压栈
void push(int value)
{
    top++;
    data[top] = value;
}
//出栈
int pop()
{
    int temp = data[top];
    top--;
    return temp;
}

//求当前栈长度
int Getlength()
{
    return top + 1;
}

~mystack()
{
    delete[] data;
}

};

void main()
{
int num, n;
mystack stack;
cout << "请输入要转化的十进制数:";
cin >> num;
cout << "请输入要转化为n进制数:";
cin >> n;
while (num)
{
stack.push(num%n);
num = num / n;
}
while (stack.Getlength()>0)
{
cout << stack.pop();
}
cout << endl;
}
图片说明
2、
#include
using namespace std;

class A
{
private:
int* a;
int top;
public:
A()
{
a = new int[100];
top = -1;
}

void push(int value)
{
    top++;
    a[top] = value;
}

int pop()
{
    int num;
    top--;
    num = a[top];
    return num;
}

int length()
{
    return top+1;
}

~A()
{
    delete[] a;
}

};

void main()
{
int number,n,value;
A x;
cout << "请输入要转化的十进制数:";
cin >> number;
cout << "请输入要转化为n进制数:";
cin >> n;
while(number)
{
value=number%n;
x.push(value);
number=number/n;
}
while(x.length()>0)
{
cout<<x.pop();
}
cout<<endl;

}
图片说明

int pop()
{
int temp = data[top];
top--;
return temp;
}

int pop()
{
int num;
top--;
num = a[top];
return num;
}
不等价,后者先--,然后再返回,导致返回了a[0]前面没有初始化的内存去了,就有了-33686019