c++栈的问题

来源:百度知道 编辑:UC知道 时间:2024/05/23 01:34:57
请看下这个代码
为什么最后调试会出一个弹出错误,生成是没错误的,而且把后面的注销不注销结果也会不一样,搞不懂,高手来看下
#include <iostream>
using namespace std;
#define CAP 100

class MyStack
{
public:
MyStack()
{
cap=CAP;
M=new int[cap];
size=0;
}
~MyStack()
{
delete[] M;
}
void push(int value)
{
if(size==cap)
{
cap*=2;
int* memory=new int(cap);
memcpy(memory, M, sizeof(int)*cap/2);
delete[] M;
M=memory;
}
M[size]=value;
size++;
}
int top()
{
if(size==0)
return 0;
return M[size-1];
}
void pop()
{
if(size>0)
size--;
}
bool empty()
{
return size==0;
}
int _size()
{
return size;
}

private:
int* M;
int cap;
int size;
};

int main()
{
MyStack mystack;

老兄,你也太不细心了:
int* memory=new int(cap);
》》》》》
int* memory=new int[cap];

pop函数改动一下
int top()
{
if(size==0)
return 0;
return M[size--];
}

一楼正解

你的push函数里就对M进行了释放,在析构函数里就不能再释放了,去掉
~MyStack()
{
// delete[] M;
}