症状:new后仍然能返回一个正常地址,并且对于该地址进行操作(入队列、出队列)均未出现问题。但是最后删除却报出堆破坏问题。
原因:size不小心写成了m_size。对于数组,清楚地知道其大小不能为零,但是对于动态分配时却不是很了解。这个问题最终也让自己又学到了知识。
部分源代码:
template<typename T>class MyQueue{public:MyQueue( size_t size = MinSize );~MyQueue();void push_back( T & e );void pop_front();size_t size();T &front();T &back();bool isempty();bool isfull();protected:private:const static size_t MinSize = 20;size_t m_capacity;size_t m_size;size_t m_front;size_t m_rear;T *m_elem;};template<typename T>MyQueue<T>::MyQueue( size_t size ){if( size < MinSize )size = MinSize;m_capacity = size;m_size = 0;m_front = 0;m_rear = -1;/* Error: 分配大小为零的数组,正确写法:new T[size] */m_elem = new T[m_size];}