C++ new大小为零的数组

在实现队列数据结构时,由于自己马虎出现了一个“堆破坏”的错误——其实就是new大小为零的数组了。

症状: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];
}
posted @ 2014-10-07 21:05  MiracleCoder  阅读(617)  评论(0编辑  收藏  举报