C++newサイズゼロの配列
14427 ワード
キューデータ構造を実現する際、自分がいい加減に「スタック破壊」というエラーが発生しました.実はnewサイズがゼロの配列です.
症状:new後も正常なアドレスを返すことができ、そのアドレスに対して操作(入キュー、出キュー)しても問題は発生しません.しかし、最後に削除すると破壊問題が報告された.
原因:sizeはうっかりm_と書いてしまったsize.配列については,その大きさがゼロではないことは明らかであるが,動的割り当てについてはよく知られていない.この問題は最終的に自分にも知識を学ばせた.
ソースの一部:
症状: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];
}