请选择 进入手机版 | 继续访问电脑版

nju-ee-cpp-内存释放的问题

[复制链接]
密战 发表于 2021-1-1 10:30:04 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
内存释放的问题——Debug Assertion Failed File:dgbdel.cpp Line 52

在CArray类的析构函数中,如果没有主动用delete释放内存,反而不会报错误
[code]//include the headers that you need here.#include#include#include #includeusing namespace std;template class CArrayIterator;template class CArrayConstIterator;template class CArray{public:        typedef T Element;        typedef CArrayIterator Iterator;        typedef CArrayConstIterator ConstIterator;public:        CArray() {                _buff=NULL;                _cap=0;                _size=0;        }        CArray(const CArray &rhs){                                _buff=rhs._buff;                _size=rhs._size;                _cap=rhs._cap;                        }        ~CArray() {                //if(_buff!=NULL)                //        delete[] _buff;       //? ?凭什么我不delete反而能过啊                _buff=NULL;                _cap=0;                _size=0;        }public:        int capacity() const        {                return _cap;        }        int size() const        {                return _size;        }        void recap(int cap){                Element *p1=NULL;                p1 = new Element[cap];                _size=_size>cap? cap : _size;                //memcpy(_buff,p1,4*_size);                for(int i=0;iindex;i--){                        _buff=_buff[i-1];                }                _buff[index]=element;                _size++;        }        void copy(const CArray &rhs){                recap(rhs._cap);                for(int i=0;ioperator*());                }                bool operator==(const CArrayIterator &it){                        if(_current==it._current)                                return true;                        else                                return false;                }                bool operator!=(const CArrayIterator &it){                        if(_current!=it._current)                                return true;                        else                                return false;                }                CArrayIterator& operator++(){                        ++_current;                        return *this;                }                CArrayIterator  operator++(int){                        CArrayIterator ret=*this;                        ++_current;                        return ret;                }        protected:                T *_current;                friend class CArray;        };        template         class CArrayConstIterator        {        public:                CArrayConstIterator() {                        _current=NULL;                }                CArrayConstIterator(T *current){                        _current=current;                }                CArrayConstIterator(const CArrayConstIterator &rhs){                        _current=rhs._current;                }                ~CArrayConstIterator() {                        return;                }        public:                //实现所需要的利用符重载函数                T& operator*()const{                        return *_current;                }                T* operator->()const{                        return &(this->operator*());                }                bool operator==(const CArrayConstIterator &it){                        if(_current==it._current)                                return true;                        else                                return false;                }                bool operator!=(const CArrayConstIterator &it){                        if(_current==it._current)                                return false;                        else                                return true;                }                CArrayConstIterator& operator++(){                        ++_current;                        return *this;                }                CArrayConstIterator  operator++(int){                        CArrayConstIterator ret=*this;                        ++_current;                        return ret;                }        protected:                T *_current;                friend class CArray;        };        template         class Obj        {        public:                Obj(){};                Obj(int val) : data(val){};                ~Obj(){};        public:                T data;        private:                template                 friend std::ostream &operator
回复

使用道具 举报

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

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )