私はクラスのシミュレーションを書いていますが、その一部には生物の繁殖が含まれています。私の有機体はアレイに保持されており、繁殖するときにアレイのサイズを大きくする必要があります。複数の生物に対して複数のクラスがあるため、次のテンプレートを使用しました。
template <class orgType>
void expandarray(orgType* oldarray, int& numitems, int reproductioncount)
{
orgType *newarray = new orgType[numitems+reproductioncount];
for (int i=0; i<numitems; i++) {
newarray[i] = oldarray[i];
}
numitems += reproductioncount;
delete[] oldarray;
oldarray = newarray;
newarray = NULL;
}
ただし、このテンプレートは何らかの形でデータを破損しているようです。再現せずに (expandarray の呼び出しをコメントアウトして) プログラムを正常に実行できますが、この関数を呼び出すとプログラムがクラッシュします。expandarray 関数の実行中にプログラムがクラッシュすることはありませんが、後でアクセス違反が発生するとクラッシュします。
配列を拡張する関数を何百回も書いてきましたが、今回は何を失敗したのかわかりません。私の機能に明らかに間違っていることがありますか?それはあなたに正しく見えますか?
編集:みんなの助けに感謝します。こんなに明白なことを見逃したなんて信じられない。using std::vector
: については、まだクラスで説明していません。ばかげているように見えますが、教えられたメソッドを使用してコードを記述する必要があります。