私はこの単純なコードを持っています (物事を短くするために、重要なビットはおそらくコンストラクターと add メソッドだけです) (コードが更新されました)。
#include "general.h"
template <class T>
class Template
{
private:
T* oldArr;
T* newArr;
int oldArrTop;
int oldArrLen;
public:
Template();
~Template();
void add(const T& val);
void print();
};
template <class T>
Template<T>::Template()
{
oldArr=new T[2];
oldArrTop=0;
oldArrLen=2;
newArr=new T[4];
//newArr's length is always 2.
}
template <class T>
Template<T>::~Template()
{
delete[] oldArr;
delete[] newArr;
}
template <class T>
void Template<T>::add(const T& val)
{
//add normally
oldArr[oldArrTop]=val;
//need to copy 2 elements
if( oldArrTop%2==1 )
{
newArr[oldArrTop]=oldArr[oldArrTop];
newArr[oldArrTop-1]=oldArr[oldArrTop-1];
}
oldArrTop++;
//need to double array's size
if( oldArrTop==oldArrLen )
{
delete[] oldArr;
oldArr=newArr;
oldArrLen*=2;
newArr=new T[oldArrLen*2];
}
}
template <class T>
void Template<T>::print()
{
for (int i=0; i<oldArrTop; i++)
cout<<oldArr[i]<<endl;
}
テンプレートを使用するコードは次のとおりです。
Template<int> a=Template<int>();
for(int i=0;i<10;i++)
a.add(i);
a.print();
ただし、整数でテンプレートを使用した場合(たとえば)、初めて配列を削除したとき(最初に追加で「配列のサイズを2倍にする必要がある」部分に入ったとき、ヒープ破損エラーが発生しました。誰でも知っています問題は? どうもありがとうございました!
何が修正されたのかわかりませんが、ヒープ破損エラーはなくなりました。ただし、0 から 9 までの数字を表示する代わりに、変な数字 (-842105421) を表示するだけです。理由はありますか?