鱼C论坛

 找回密码
 立即注册
查看: 2070|回复: 2

[已解决]关于c++delete的问题

[复制链接]
发表于 2018-3-27 20:23:47 | 显示全部楼层 |阅读模式
9鱼币
本帖最后由 Sj中国智造 于 2018-3-27 20:27 编辑
#include <iostream>

#define MAX_SIZE 1024
#define TRUE  1
#define FALSE  0
using namespace std;

template <class T>
class sqStack
{
public:
        sqStack();//申请一块内存
        ~sqStack();//释放申请的内存
        int isEmpty();//判断栈是否为空
        T push(T element);//压栈
        T pop();//弹栈

private:
        T * top;//头指针
        T *base;//底指针
};

template <class T>
sqStack<T>::sqStack()
{
        this->base = this->top = new T[MAX_SIZE];
}

template <class T>
sqStack<T>::~sqStack()
{
        cout << "析构函数正在释放头指针的指向的内存" << endl;
        delete[] this->top;
        cout << "析构函数正在释放底指针的指向的内存" << endl;
        delete[] this->base;
}

template<class T>
int sqStack<T>::isEmpty()
{
        if (this->top == this->base)
        {
                return TRUE;
        }
        else return FALSE;
}

template <class T>
T sqStack<T>::push(T element)
{
        this->top++;
        *(this->top )= element;
        return *(this->top);
}

template <class T>
T sqStack<T>::pop()
{
        if (!isEmpty())
        {
                this->top--;
                return *(this->top + 1);
        }
        return NULL;
}

int main()
{
        sqStack<int> stack1;

        stack1.push(5);
        stack1.push(6);

        cout << "弹出的元素是:" << stack1.pop() << endl;
        system("pause");
        return 0;
}

知道是析构函数中的delete[]函数出错,但不知道错在哪和怎么改,求大神解!
最佳答案
2018-3-27 20:23:48
delete[]是释放整个数组,因为delete[] this->top已经释放了整个数组了,所以第二个delete[]语句找不到数组的内存,就崩溃了,还有delete[] 好像只能释放数组的首地址,top和base指针在操作中都发生了改变,不再指向首地址,你可以声明一个指向首地址的指针或者操作的时候声明一个新的指针接收top和base的地址来操作

最佳答案

查看完整内容

delete[]是释放整个数组,因为delete[] this->top已经释放了整个数组了,所以第二个delete[]语句找不到数组的内存,就崩溃了,还有delete[] 好像只能释放数组的首地址,top和base指针在操作中都发生了改变,不再指向首地址,你可以声明一个指向首地址的指针或者操作的时候声明一个新的指针接收top和base的地址来操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-27 20:23:48 | 显示全部楼层    本楼为最佳答案   
delete[]是释放整个数组,因为delete[] this->top已经释放了整个数组了,所以第二个delete[]语句找不到数组的内存,就崩溃了,还有delete[] 好像只能释放数组的首地址,top和base指针在操作中都发生了改变,不再指向首地址,你可以声明一个指向首地址的指针或者操作的时候声明一个新的指针接收top和base的地址来操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-29 20:37:59 | 显示全部楼层
未灭时间 发表于 2018-3-27 22:13
delete[]是释放整个数组,因为delete[] this->top已经释放了整个数组了,所以第二个delete[]语句找不到数组 ...

谢了,解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-29 16:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表