0

コード

文字列の処理に問題があります。文字列を試すたびに、素敵な小さなエラー コードが表示されます。

arraytest.exe の 0x77e815de で未処理の例外: 0xC0000005:
アクセス違反読み取り場所 0xabababab.

int、double、および char を問題なく処理します。また、使用していたのとまったく同じテスト文字列 (アルファベット) を char* として試してみましたが、それもうまくいきました。私が完全に理解できない理由で、それは弦を吐くだけです. 次にどこに行けばいいのか本当にわかりません。助言がありますか?

4

1 に答える 1

3

の再割り当てコードに問題があります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は自身の内部データ (そこにはありません) をコピーしようとし、アクセス違反を引き起こす可能性があります。

于 2012-05-16T06:46:19.257 に答える