出现delete释放边界 超出 new创建的内存边界的情况!报错!删去delete后不报错!
但未释放内存!暂未得到解决!!!!!!
CRT detected that the application wrote to memory after end of heap buffer_wu_lai_314的专栏-CSDN博客
看该文章!!!!
#pragma once
const int MAX_SIZE = 100;
class stack
{
private:
char* data;//属性:线性表!
int size;//堆栈实际大小
int top;//栈顶
public:
stack();//默认构造函数
stack(int s);//有参构造函数
~stack();//析构函数
void push(char ch);//入栈
char pop();//出栈并返回栈顶元素
char getTop();//获得栈顶元素但不出栈
bool isEmpty();//判断栈是否为空
bool isFull();//判断栈是否满
void setNull();//设置栈为空!!!!
};
#include "stack.h"
#include <iostream>
using namespace std;
stack::stack() {
size = MAX_SIZE;
top = -1;
data = new char(MAX_SIZE);
}
stack::stack(int s) {
size = s;
top = -1;
data = new char(size);
}
stack::~stack()
{
delete[] data;//内存回收 释放new创建data占用的内存
//释放内存超出所分配的边界!报错!!!?删去该行代码九回复正常!why????
cout << "finished delete\n";
}
void stack::push(char ch) {
if (!isFull())
data[++top] = ch;
//return true;
}
char stack::pop() {
if (!isEmpty())
return data[top--];
}
char stack::getTop() {
if (!isEmpty())
return data[top];
}
bool stack::isEmpty() {
if (top == -1) {
return true;
}
else {
return false;
}
}
bool stack::isFull() {
if (top == size-1 ) {
return true;
}
else {
return false;
}
}
void stack::setNull() {
top = -1;
cout << "top=-1!\n";
}
#include "stack.h"
#include <iostream>
using namespace std;
int main() {
stack st(5);//利用构造函数初始化
//stack::stack();
char ch;
while (!st.isFull()) {
cout << "请输入需要压入栈中的内容:\n";
cin >> ch;
st.push(ch);
}
cout << "\n输出栈顶数据:";
cout << st.getTop() << endl;
cout << "全部数据为:";
while (!st.isEmpty()) {
cout << st.pop() << " ";
}
if (st.isEmpty())
cout << "栈已全部弹出!\n";
else
cout << "栈未全部弹出!\n";
st.setNull();
st.~stack();
return 0;
}
懒猫老师版:(仍然存在delete那个问题!!!!!)
#include "stack.h"
#include <iostream>
using namespace std;
int main() {
stack st(2);//利用构造函数初始化
st.push('a');
st.push('b');
cout << st.isFull() << endl;
cout << st.getTop() << endl;
cout << st.pop() << endl;
cout << st.pop() << endl;
cout << st.isEmpty() << endl;
return 0;
}