の再割り当てコードに問題がありますpush_back
template<class type>
void DynamicArray<type>::push_back(type newValue)
{
++_size; // <=== **
if (_size > _capacity) // If size larger than capacity
{
_capacity *= CAPACITY_MULT; // double capacity
type* tempArray = new type[_capacity];// Create temporary array with new capacity
// Copy array values into temporary array
for (int i = 0; i < _size; i++) // <=== **
{
tempArray[i] = dynArray[i];
}
// Delete dynArray
delete[] dynArray;
// Insert new value at end of temporary array
// Set dynArray to temporary array
dynArray = tempArray;
}
dynArray[_size - 1] = newValue;
}
新しい要素用のスペースがあるかどうかを確認する前に、現在のコンテナーのサイズを大きくすることから始めます。次に、古い値を新しい配列にコピーするときに、新しいサイズを使用します。
これはプリミティブ型では機能するように見えるかもしれませんが、astd::string
は自身の内部データ (そこにはありません) をコピーしようとし、アクセス違反を引き起こす可能性があります。