在指定位置打印int或char数组有什么问题



我在头文件中有一个命名空间,实现了一个基本堆栈。现在,在push函数上,它应该将一个char推到堆栈上,然后使用pop函数,它会从堆栈中删除一个字符AND这是我的问题,将弹出的元素打印到控制台,但是它实际上从来没有这样做过。我的问题是,为什么会发生这种情况,我可能错过了什么样的东西?

int main()
{
    myStack::push(12);
    myStack::push(344);

    myStack::pop();
    return 0;

}

以及头文件:

void push(int c)
{
    if(top == max_size) throw Overflow();
    v[top] = c;
    top++;
    
}
void pop()
{
    
    printf("%dn",v[top]);
    top--;
}

myStack定义:

namespace myStack {
const int max_size = 200;
int top = 0;
int v[max_size];

class Overflow {
    public:
        bool isOverflow = true;
        
};
void push(int c)
{
    if(top == max_size) throw Overflow();
    v[top] = c;
    top++;
    
}
void pop()
{
    
    printf("%dn",v[top]);
    top--;
}
}

请注意,对push的调用在递增top之前会分配给v[top],因此在pop函数中,top的值是一个未分配的整数。

您只需要在打印v[top]的值之前递减top

void pop()
{  
    top--;
    printf("%dn",v[top]);
}

最新更新